首页 > 代码库 > 一步步学习JSON
一步步学习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();