码迷,mamicode.com
首页 > Web开发 > 详细

一步步学习JSON

时间:2014-07-09 21:00:14      阅读:309      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   java   color   

 

什么是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基础示例

对象示例:

bubuko.com,布布扣

数组示例:

bubuko.com,布布扣

对象数组嵌套示例:

bubuko.com,布布扣

 JSONXML实例比较

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

bubuko.com,布布扣 bubuko.com,布布扣

 .Net操作JSON数据

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

  JsonTextReader读取

  bubuko.com,布布扣

   运行结果:

      bubuko.com,布布扣

      JObject读取

bubuko.com,布布扣

      运行结果:

      bubuko.com,布布扣

    使用JsonWriter创建JSON字符串

      bubuko.com,布布扣

      运行结果如下:

  bubuko.com,布布扣

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

  bubuko.com,布布扣

  运行结果:

  bubuko.com,布布扣

  其中Person类的定义如下:

       bubuko.com,布布扣

整个代码如下所示:

bubuko.com,布布扣
//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

 

一步步学习JSON,布布扣,bubuko.com

一步步学习JSON

标签:des   style   blog   http   java   color   

原文地址:http://www.cnblogs.com/binghuojxj/p/3829990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!