一步步学习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();
最新文章
- 使用xhprof分析php代码性能
- 【MVVMLight小记】二.开发一个简单图表生成程序附源码
- elasticsearch中如何高效的使用filter
- SQLite Databases 数据存储
- ASP.NET Web API 帮助(help)页面上没有 Test API按钮的解决方法
- python判断文件目录是否存在
- linux 用 SSH2协议远程连接并控制 linux
- Servlet配置文件
- eclipse快速查找一个变量、方法或者类被引用的地方
- 居然还有WM_TIMECHANGE(只在用户手动改变系统时间时才会产生作用)
- Ubuntu系统下为IDEA创建启动图标
- 小白鼓捣GIT的心得
- (第三章)Java内存模型(下)
- 【Demo 0002】Android 提醒框
- js获取url中的参数方法
- 在Linux下更新或安装curl
- Django进阶篇【1】
- VPS、虚拟主机、云主机的区别
- 如何生成ExecutionGraph及物理执行图
- [转]ASP.NET MVC学习系列(二)-WebAPI请求 传参