一步步学习JSON
json是JavaScript Object Notation(javascript对象表示法)的缩写,是一种轻量的数据格式,是基于javascript的一个子集。与XML一样,json也是一种存储和交换文本信息的语法。相对于XML来说,json更小、更快,更易解析。。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
JSON语法规则
明确JSON语法是javascript对象表示法语法的子集:
- 数值在名称/值对中
- 数据由逗号分隔
- 花括号存放对象
- 方括号存放数组
JSON数据书写的格式是名称/值对。具体格式为名称:值,名称和值对都可以是字段名称(包括在双引号中),如下所示:
"Name": "binghuojxj"
上面的语句等价于下面的javascript语句:
Name="binghuojxj";
JSON的值可以是:
- 数字(整数或浮点数)
- 对象(在花括号中)
- 字符串(在双引号中)
- 数组(在方括号中)
- 布尔值(true或false)
- Null
JSON基础结构
JSON内建有两种结构,JSON表示javascript的对象和数组,所以这两种结构就是对象和数组。通过对象和数组,JSON可以表示各种复杂的结构。
对象:对象在js中表示为"{}"括起来的内容,数据结构为{key:value,key:value,…},如下所示:
{
"firstName": "George",
"lastName": "Bush"
}
在面向对象的语言中,key为对象的属性,通过对象.key可以访问对应属性的value,这个value可以是数字、字符串、对象、数组几种。
数组:数组在js中表示为"[]"括起来的内容,数据结构如下所示:
["java","javascript","vb",...]
取值方式和所有语言一样,都是通过索引获取,数组内的值也可以是数字、字符串、对象、数组几种。
JSON基础示例
对象示例:

数组示例:

对象数组嵌套示例:

JSON和XML实例比较
XML和JSON文件分别如下所示:

.Net操作JSON数据
- 自己按照JSON语法格式,手动拼接JSON字符串。这个如非必要,不可取。
- 通过开源类库Newtonsoft.Json。在工程引用之后,可以使用JObject、JsonReader和JsonWriter来操作,这个确实是随心所欲,群众的验光师雪亮的哈。
JsonTextReader读取

运行结果:

JObject读取

运行结果:

使用JsonWriter创建JSON字符串

运行结果如下:

使用JsonSerializer读写JSON对象(基于JsonReader和JsonWriter)

运行结果:

其中Person类的定义如下:

整个代码如下所示:
//JsonReader读Json字符串
const string jsonText = @"{ ""firstName"":""Brett"", ""lastName"":""McLaughlin""}";
var reader = new JsonTextReader(new StringReader(jsonText));
while (reader.Read())
{
Console.WriteLine(reader.TokenType + "\t\t" + reader.ValueType + "\t\t" + reader.Value);
}
//使用JObejct读取JSON字符串
const string jsonText = @"{ ""firstName"":""Brett"", ""lastName"":""McLaughlin""}";
var jObect = JObject.Parse(jsonText);
var values = jObect.Properties().Select(item => item.Value.ToString()).ToArray();
foreach (var value in values)
{
Console.Write(value + " ");
}
//使用JsonWriter创建JSON字符串
var stringWriter = new StringWriter();
var jsonWriter = new JsonTextWriter(stringWriter);
jsonWriter.WriteStartObject();
jsonWriter.WritePropertyName("firstName");
jsonWriter.WriteValue("Brett");
jsonWriter.WritePropertyName("lastName");
jsonWriter.WriteValue("McLaughlin");
jsonWriter.WriteEndObject();
jsonWriter.Flush();
var jsonText = stringWriter.GetStringBuilder().ToString();
Console.WriteLine("生成的JSON字符串是:" + jsonText);
//使用JsonSerializer读写对象(基于JsonWriter与JsonReader)
var person = new Person(){FirstName = "Xiaojun", LastName = "Ju"};
var serializer = new JsonSerializer();
var stringWriter = new StringWriter();
serializer.Serialize(stringWriter,person);
Console.WriteLine("构建的JSON字符串为:"+stringWriter.GetStringBuilder().ToString());
var stringReader = new StringReader(@"{ ""firstName"":""Xiaojun"", ""lastName"":""Ju""}");
var person1 = (Person) serializer.Deserialize(new JsonTextReader(stringReader), typeof (Person));
Console.WriteLine(person1.LastName+" "+person1.FirstName);
Console.ReadKey();
一步步学习JSON的更多相关文章
- 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二)
http://blog.csdn.net/jiuqiyuliang/article/details/19967031 目录: 基于asp.net + easyui框架,一步步学习easyui-data ...
- 一步步学习javascript基础篇(0):开篇索引
索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...
- 一步步学习javascript基础篇(8):细说事件
终于学到事件了,不知道为何听到“事件”就有一种莫名的兴奋.可能是之前的那些知识点过于枯燥无味吧,说起事件感觉顿时高大上了.今天我们就来好好分析下这个高大上的东西. 可以说,如果没有事件我们的页面就只能 ...
- 一步步学习javascript基础篇(7):BOM和DOM
一.什么是BOM.什么是DOM BOM即浏览器对象模型,主要用了访问一些和网页无关的浏览器功能.如:window.location.navigator.screen.history等对象. DOM即文 ...
- 一步步学习javascript基础篇(6):函数表达式之【闭包】
回顾前面介绍过的三种定义函数方式 1. function sum (num1, num2) { return num1 + num2; } //函数声明语法定义 2. var sum = funct ...
- 一步步学习javascript基础篇(5):面向对象设计之对象继承(原型链继承)
上一篇介绍了对象创建的几种基本方式,今天我们看分析下对象的继承. 一.原型链继承 1.通过设置prototype指向“父类”的实例来实现继承. function Obj1() { this.name1 ...
- 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)
前面我们介绍了可以通过Object构造函数或对象字面量都可以用来创建单个对象,但是如果需要创建多个对象的话,显然很多冗余代码. 接下来介绍几种模式来创建对象.不过在此之前,我们还是先来了解下 type ...
- 一步步学习javascript基础篇(3):Object、Function等引用类型
我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...
- 一步步学习javascript基础篇(2):作用域和作用域链
作用域和作用域链 js的语法用法非常的灵活,且稍不注意就踩坑.这集来分析下作用域和作用域链.我们且从几道题目入手,您可以试着在心里猜想着答案. 问题一. if (true) { var str = & ...
随机推荐
- C++—函数探幽
一.内联函数 1.内联函数的机制 内联函数是C++为提高程序运行速度而做的一项改进. 函数调用机制:常规函数调用使程序使程序跳到被掉函数的地址,并在函数结束时返回. 内联函数的机制:内联函数的代码与其 ...
- Java集合的Stack、Queue、Map的遍历
Java集合的Stack.Queue.Map的遍历 在集合操作中,常常离不开对集合的遍历,对集合遍历一般来说一个foreach就搞定了,但是,对于Stack.Queue.Map类型的遍历,还是有一 ...
- Ubuntu 查看文件以及磁盘空间大小管理
(1)查看文件大小 查看当前文件夹下所有文件大小(包括子文件夹) du -sh # du -h15M ./package16K ./.fontconfig4.0K . ...
- 猫都能学会的Unity3D Shader入门指南
https://onevcat.com/2013/07/shader-tutorial-1/ https://onevcat.com/2013/08/shader-tutorial-2/
- IOS开发—UIDatePicker 日期/时间选取器(滚轮)
UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,专门用于接受日期.时间和持续时长的输入.日期选取器的各列会按照指定的风格进行自动配置,这样 ...
- 【bzoj1053】反素数
[bzoj1053]反素数 题意 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4.如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例 ...
- 浏览器编码的函数简介escape(),encodeURI(),encodeURIComponent()
1.escape() escape()是js编码函数中最古老的一个.虽然这个函数现在已经不提倡使用了,但是由于历史原因,很多地方还在使用它,所以有必要先从它讲起. 实际上,escape()不能直接用于 ...
- jmeter笔记3
1. 使用JMeter做性能测试(Windows) 1.1. 启动JMeter 下载JMeter的安装包,点击安装包\jakarta-jmeter-2.3RC4\bin下的jmeter.bat文件即 ...
- chrome浏览器下页面顶部出现一条空白解决
最近遇到页面在chrome浏览器下,顶部会出现一条空白的问题.后来知道是bom头的问题. 1.什么是bom头? BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑 ...
- python 基础学习(字典对象,set对象)
1.dict 字典对象 a.定义对象 d={'a':14,'b':12}b.通过key获取value d['a'] 方法1.判断key是否存在 if 'a' in d: d['a']方法2:通过用ge ...