首页 > 代码库 > 一步步学习JSON

一步步学习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基础示例

对象示例:

数组示例:

对象数组嵌套示例:

 JSONXML实例比较

 XML和JSON文件分别如下所示:

 .Net操作JSON数据

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

  JsonTextReader读取

  

   运行结果:

      

      JObject读取

      运行结果:

      

    使用JsonWriter创建JSON字符串

      

      运行结果如下:

  

  使用JsonSerializer读写JSON对象(基于JsonReaderJsonWriter)

  

  运行结果:

  

  其中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();
View Code