2017年8月26日

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标准,详请参考:http://tools.ietf.org/html/rfc4627。JSON的媒体类型被定义为 application/json,而文件的后缀为.json。

JSON是什么

JSON是一种简单数据格式,它有三种数据结构:

  • 键值对 —— Name/Value (Key/Value)
  • 对象 —— Object
  • 数组 —— Arrays

一个有效的JSON文档需要被包含在一对花括号内
{ JSON-Data }

请注意,有些开发社区或线上文档直接将上面的JSON文档称为JSON字符串,这两者的意思是一样的

为什么使用JSON

JSON被认为是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个属性,它们之间用,进行分割

数组 —— Array

JSON中[]来包含数组元素,参考下面的例子:

{
    “people” : [
        { “firstName”: “John”, “lastName”: “Smith”, “age”: 35 },
        { “firstName”: “Jane”, “lastName”: “Smith”, “age”: 32 }
    ]
}

数据类型

JSON中的数值(键值对中的值)可以是以下任意一种:
Object
Array
String
Number
Boolean
null

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进制来表示一个数值。

Boolean

JSON中的Boolean值可以用true或false来表示。不用加{}
{ “emailValidated” : true}
Boolean值也不需要使用双引号来修饰。

null

严格来说null并不是一个数据类型,但它非常重要,它表示一个属性或元素没有值。因此请注意 ' ' 表示的是空字符串,而null表示的才是空值。
{ “age” : null}

代码注释

JSON不允许在JSON文档或字符串中添加注释。注释功能最早在JSON中是存在的,但开发者们错误地使用了它来辅助JSON数据的解析,当Douglas Crockford意识到这种不好的使用实践后,便取消了注释功能,以保证JSON在不同计算平台间作为交互数据格式的特性。

样式

你可能已经注意到了在之前的例子中,所有的属性名称都使用了驼峰式的命名规则。这并不是JSON的一个标准要求,但这能够帮助提高JSON文档的可读性,因此作为一个事实标准在所有JSON应用中被使用。

语法

Douglas Crockford 在他的JSON网站http://www.json.org/中,给出了所有JSON语法语义的说明。另外还有一个iOS App JSON Pro FREE可以用来通过示例学习或参考JSON。

JSON校验

一个文本文档或字符串必须遵守JSON的语法定义,才能被视作一个有效的JSON文档。JSON文档是否有效非常重要,因为它直接决定了,你的JSON数据能否在不同的应用中被正确地解析和使用。JSONLint提供了一个可交互的Web版JSON校验工具,你只需要将你的JSON文档粘贴进去,并点击校验按钮,它便会自动进行校验,并将问题显示在下方。

posted on 2017-08-27 21:19  liuyulian  阅读(103)  评论(0)    收藏  举报

导航