牛骨文教育服务平台(让学习变的简单)

原文出处:http://codecloud.net/core-json-tutorial-6735.html
本文由程序员的资料库技术翻译小组翻译,如有错误请帮忙更正,谢谢支持。

英文原文:Core JSON

欢迎转载,转载请务必保留译文出处和原文出处,谢谢合作!

JSON(JavaScript Object Notation)是一种基于文本的标准数据交换格式,使应用程序通过计算机网络交换数据。因为JSON独立于编程语言和计算平台,因此用Ruby ,Java/EE,Javascript,C#/.Net,PHP等编程语言写的程序,可以很容易的消耗和产生JSON数据。而与JSON相关的API和工具十分丰富,这让你很容易的将JSON运用在你喜爱的编程语言,IDE 和运行环境里。此外,流行的NoSQL数据库,诸如MongoDB和ConchBase,都是基于JSON的。

在2001年,JSON被道格拉斯•克罗克福德创建,并在RFC4627与IETF(因特网工程任务组)标准中被规定;详情见 http://tools.ietf.org/html/rfc4627。根据规范,JSON的IANA(互联网数字分配机构)媒体类型是应用/json,文件类型是json。

什么是JSON?

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

  • 键/值对。
  • 对象。
  • 数组。

有效的JSON文件总是被大括号围绕,像这样:

{ JSON-Data }

请注意,JSON社区的一些成员使用术语“字符串”而不是“文档”来描述JSON 。

为什么要用JSON?

在因特网上,JSON正逐渐代替XML成为首选的数据交换格式,这是因为JSON容易阅读并且它的结构匹配常见的编程概念,诸如对象和数组。JSON也比XML更高效(即更快的解析和网络传输),这是因为JSON更紧凑——没有开始和结束标签。

键/值对

键/值对看起来像这样:

{ 
  "firstName": "John"
}

属性名(即第一个名字)是被双引号环绕的字符串。值可以是字符串(如上面的例子),但这仅是有效数据类型中的一组。(请查看数据类型章节获取更多细节。)一些著名的科技公司申称他们使用JSON数据格式,但是他们并不用引号环绕他们的字符串。然而,这不是有效的JSON;请查看JSON验证章节获得更多信息。

对象

对象是无序键/值对的集合。下面的例子展示了一个地址对象:

{

  "address" : {

"line1" : "555 Main Street",

"city" : "Denver",

"stateOrProvince" : "CO",

"zipOrPostalCode" : "80202",

"country" : "USA"

  }

}

对象(这里是指地址)被环绕在大括号里,由一对对被逗号分割的键/值对组成。

数组

数组是有序值的集合,数组看起来像这样:

{

  "people" : [

{ "firstName": "John", "lastName": "Smith", "age": 35 },

{ "firstName": "Jane", "lastName": "Smith", "age": 32 }

  ]

}

值类型

值(即键/值对右手边的)可以是下列任一类型:

  • 对象
  • 数组
  • 字符串
  • 数字
  • 布尔值
  • null

数字 数字可以是整数或者双精度浮点型。这里有一些例子: “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等)是被双引号环绕的字符串,但是值没有引号。数字可以有负号。紧跟在数值后面的指数部分(记作e或E),可以选择正负号。将0,八进制放在数值前是不被允许的,十六进制同样不被允许 。

布尔值

在JSON里,布尔值要么是真,要么是假,如下:

{

  "emailValidated" : true

}

属性名(emailVaild)是被双引号环绕的字符串,但是值(true)没有引号。

null

虽然从技术层面上说null不是一个数据类型,它是一个特殊的值,可以用来表示数据元素没有值。在下面的例子里, 年龄的作用域没有值(也许是因为用户选择不填写这个信息):

{
  "age" : null
}

注释

JSON不允许有注释。注释原本是JSON的一部分,但是开发者将解析指令放入注释中,这极大地滥用了它们。当道格拉斯•克罗克福德看见开发者如此实践时,他从JSON里移除了注释,以此保持计算机平台的互操作性。

样式

也许你已经注意到属性名(及冒号的左边)使用了驼峰命名法。这不是一个准则或者标准,但是一个约定俗称的规定,这个规定被写在在谷歌的JSON样式指南里: http://google-styleguide.googlecode.com/svn/trunk/jsoncstyleguide.xml.

官方语法

道格拉斯•克罗克福德的JSON网站(http://www.json.org)提供了JSON语法的完整描述。

此外,JSON Pro Quick Guide (在iphone苹果商店里可免费获取)提供了样例和JSON语法的概述。