JSON概览
JSON(JavaScript Object Notation)是一种基于文本的数据交换格式。无论你的应用是用哪种开发语言编写的(Java/EE,Ruby,PHP,C#/.Net等等),你都可以使用JSON来通过网络进行数据交互和处理。几乎所有的编程语言都有很好的库或第三方工具来提供基于JSON的API支持,因此你可以非常方便地使用任何自己喜欢的编程语言来处理JSON数据。而另一方面随着REST、像MongoDB这样的NoSQL技术或标准的广泛使用,JSON也正成为一种被推荐的数据交互格式。
JSON是在2001年,由Douglas Crockford创建的,并且被IETF(Internet Engineering Task Force)定义为RFC 4627标准,详请参考:。JSON的媒体类型被定义为 application/json,而文件的后缀为.json。
JSON是什么JSON是一种简单数据格式,它有三种数据结构:
一个有效的JSON文档需要被包含在一对花括号内
{ JSON-Data }请注意,有些开发社区或线上文档直接将上面的JSON文档称为JSON字符串,这两者的意思是一样的。
为什么使用JSONJSON被认为是XML的很好替代者。因为JSON的可读性非常好,而且它没有像XML那样包含很多冗余的元素标签,这使得应用在使用JSON进行网络传输以及进行解析处理的速度更快,效率更高。
键值对 —— Name/Value键值对是JSON中最基本的数据结构:
{ “firstName”: “John” }在上面的例子中属性"firstName"是用一对双引号括起来的一个字符串。而它的值"John"在这个例子中也是一个字符串,当然它还可以是其他类型,具体可参考后面数据类型的章节。在市面上很多的产品或技术声称他们使用的是JSON数据格式,但他们在定义属性时,并没有用双引号将属性名称括起来,其实这是违反JSON定义标准的。
对象 —— Object一个JSON对象是包含了一组未排序键值对的集合。下面例子中的address就是一个JSON对象:
{ “address” : { “line1” : “555 Main Street”, “city” : “Denver”, “stateOrProvince” : “CO”, “zipOrPostalCode” : “80202”, “country” : “USA” } }上面的例子中address对象包含了5个属性,它们之间用,进行分割。
数组 —— ArrayJSON中[]来包含数组元素,参考下面的例子:
{ “people” : [ { “firstName”: “John”, “lastName”: “Smith”, “age”: 35 }, { “firstName”: “Jane”, “lastName”: “Smith”, “age”: 32 } ] } 数据类型JSON中的数值(键值对中的值)可以是以下任意一种:
Number数值类型数据可以是整型也可以是双精度的浮点型数据。下面是一些示例:
“age”: 29 “cost”: 299.99 “temperature”: -10.5 “speed_of_light”: 1.23e11 “speed_of_light”: 1.23e+11 “speed_of_light”: 1.23E11 “speed_of_light”: 1.23E+11上面的属性(如age等)都是用双引号括起来的字符串,而数值是不需要用双引号括起来的。你可以在数值前加上-号来表示负数,也可以采用科学计数法。但不能在数值前加0或使用16进制来表示一个数值。
BooleanJSON中的Boolean值可以用true或false来表示。
{ “emailValidated” : true }Boolean值也不需要使用双引号来修饰。
null严格来说null并不是一个数据类型,但它非常重要,它表示一个属性或元素没有值。因此请注意 ' ' 表示的是空字符串,而null表示的才是空值。
{ “age” : null } 代码注释JSON不允许在JSON文档或字符串中添加注释。注释功能最早在JSON中是存在的,但开发者们错误地使用了它来辅助JSON数据的解析,当Douglas Crockford意识到这种不好的使用实践后,便取消了注释功能,以保证JSON在不同计算平台间作为交互数据格式的特性。
样式你可能已经注意到了在之前的例子中,所有的属性名称都使用了驼峰式的命名规则。这并不是JSON的一个标准要求,但这能够帮助提高JSON文档的可读性,因此作为一个事实标准在所有JSON应用中被使用。
语法Douglas Crockford 在他的JSON网站中,给出了所有JSON语法语义的说明。另外还有一个iOS App JSON Pro FREE可以用来通过示例学习或参考JSON。
JSON校验一个文本文档或字符串必须遵守JSON的语法定义,才能被视作一个有效的JSON文档。JSON文档是否有效非常重要,因为它直接决定了,你的JSON数据能否在不同的应用中被正确地解析和使用。JSONLint提供了一个可交互的Web版JSON校验工具,你只需要将你的JSON文档粘贴进去,并点击校验按钮,它便会自动进行校验,并将问题显示在下方。
在上面这个例子中,这个JSON对象的city属性没有加上双引号,导致校验失败。在返回的提示中,显示了“Expecting 'STRING', got 'undefined'”错误。
JSONLint也提供了一个可以在Chrome中直接使用的插件。
JSON数据模型在应用中手工编写JSON文档,会很枯燥并容易出错。为了防止这样的恶错误 ,你可以使用JSONPad或JSON Editor Online这样的工具,它们能够帮助你构建JSON逻辑模型(类似于UML),然后通过模型生成JSON文档。
JSON Editor Online[ JSON Editor Online] () 是一个在线JSON数据建模工具,他也提供了一个Chrome插件可以使用。
浏览器中的JSON
Firefox和Chrome都提供了一些很好的插件方便开发人员查看或处理JSON数据。
REST ClientRest Client是Firefox中的一个扩展应用。他能够帮助开发人员在浏览器中调试REST风格的Web Service。它最大的优点是能将返回的JSON数据结果,以很好的格式显示出来。