什么是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数据

  1. 自己按照JSON语法格式,手动拼接JSON字符串。这个如非必要,不可取。
  2. 通过开源类库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的更多相关文章

  1. 基于asp.net + easyui框架,一步步学习easyui-datagrid——实现分页和搜索(二)

    http://blog.csdn.net/jiuqiyuliang/article/details/19967031 目录: 基于asp.net + easyui框架,一步步学习easyui-data ...

  2. 一步步学习javascript基础篇(0):开篇索引

    索引: 一步步学习javascript基础篇(1):基本概念 一步步学习javascript基础篇(2):作用域和作用域链 一步步学习javascript基础篇(3):Object.Function等 ...

  3. 一步步学习javascript基础篇(8):细说事件

    终于学到事件了,不知道为何听到“事件”就有一种莫名的兴奋.可能是之前的那些知识点过于枯燥无味吧,说起事件感觉顿时高大上了.今天我们就来好好分析下这个高大上的东西. 可以说,如果没有事件我们的页面就只能 ...

  4. 一步步学习javascript基础篇(7):BOM和DOM

    一.什么是BOM.什么是DOM BOM即浏览器对象模型,主要用了访问一些和网页无关的浏览器功能.如:window.location.navigator.screen.history等对象. DOM即文 ...

  5. 一步步学习javascript基础篇(6):函数表达式之【闭包】

    回顾前面介绍过的三种定义函数方式 1. function sum (num1, num2) { return num1 + num2; }  //函数声明语法定义 2. var sum = funct ...

  6. 一步步学习javascript基础篇(5):面向对象设计之对象继承(原型链继承)

    上一篇介绍了对象创建的几种基本方式,今天我们看分析下对象的继承. 一.原型链继承 1.通过设置prototype指向“父类”的实例来实现继承. function Obj1() { this.name1 ...

  7. 一步步学习javascript基础篇(4):面向对象设计之创建对象(工厂、原型和构造函数等模式)

    前面我们介绍了可以通过Object构造函数或对象字面量都可以用来创建单个对象,但是如果需要创建多个对象的话,显然很多冗余代码. 接下来介绍几种模式来创建对象.不过在此之前,我们还是先来了解下 type ...

  8. 一步步学习javascript基础篇(3):Object、Function等引用类型

    我们在<一步步学习javascript基础篇(1):基本概念>中简单的介绍了五种基本数据类型Undefined.Null.Boolean.Number和String.今天我们主要介绍下复杂 ...

  9. 一步步学习javascript基础篇(2):作用域和作用域链

    作用域和作用域链 js的语法用法非常的灵活,且稍不注意就踩坑.这集来分析下作用域和作用域链.我们且从几道题目入手,您可以试着在心里猜想着答案. 问题一. if (true) { var str = & ...

随机推荐

  1. C10K及C100K问题探讨 & 怎么应对大流量大并发

    首先开宗明义,离开业务单独讨论并发,都是扯淡. 就像 https://www.zhihu.com/question/20493166/answer/15998053 这里面说的 谈并发必然要谈业务,空 ...

  2. JavaScript判断鼠标滑轮是向下还是向上滚动

    我们常用的就是鼠标,鼠标中键一般都用于滑动网页,但是网页中很多很炫的效果,使用鼠标滑轮操作更好. 当然对于手机就没有这个设备了,所以就不用考虑手机端的实现方法,手机端有触摸滑动事件. 使用JavaSc ...

  3. Android控件之RadioGroup与RadioButton(单选控件)

    一.RadioGroup与RadioButton 1.什么是RadioGroup: RadioButton的一个集合,提供多选机制 2.什么是RadioButton: RadioButton包裹在Ra ...

  4. Vbs脚本经典教材(转)

    Vbs脚本经典教材(最全的资料还是MSDN) —为什么要使用Vbs? 在Windows中,学习计算机操作也许很简单,但是很多计算机工作是重复性劳动,例如你每周也许需要对一些计算机文件进行复制.粘贴.改 ...

  5. 线性表 - 从零开始实现by C++

    参考链接:数据结构探险之线性表篇     线性表

  6. 教你开启红米的USB大容量存储选项,全网首发哦

    教你开启红米的USB大容量存储选项,全网首发哦 http://bbs.7to.cn/thread-10732-1-1.html 发表于 2014-4-29 110643 红米note入手也有两天了.各 ...

  7. 【EPplus】Column width discrepancy

    description Hi Jan, I have noticed that when I set a column width there is a discrepancy between the ...

  8. img下出现几像素空白的问题

    先看一个例子和效果,应该就会明白我的问题了. <meta http-equiv="Content-Type" content="text/html; charset ...

  9. 在jsp页面中实现格式化数字,百分比,货币

    当时的要求是在jsp页面中计算百分比 实现方法 1.引入Jstl的fmt指令 <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" ...

  10. oracle序列为什么不是从1开始

    问题原因: ·当我们使用序列作为插入数据时,如果使用了“延迟段”技术,则跳过序列的第一个值 ·Oracle从 11.2.0.1版本开始,提供了一个“延迟段创建”特性: 即 当我们创建了新的表(tabl ...