JSON/zh CN

From Lazarus wiki
Revision as of 10:44, 21 June 2014 by Swen (talk | contribs)
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

English (en) suomi (fi) 日本語 (ja) 한국어 (ko) polski (pl) русский (ru) 中文(中国大陆)‎ (zh_CN)

概述

JSON (JavaScript Object Notation) 是种数据表现形式,它提供了简单的文本标准化数据交换格式。正如其名称所暗示的,它是基于JavaScript编程语言的一个子集,但它与语言无关,除了易于阅读和编写,更易于机器解析和生成。

相对于XML,它易于阅读。

JSON 对象

一个JSON对象,无非是括在大括号内的用逗号分隔的键值(名称/值)对。

{"name1":value1, "name2":value2 ...}

为了便于人们阅读和可视化,键值(名称/值)对经常垂直列出:

{
	"name1": value1,
	"name2": value2
}

键名(名称)应该使用双引号括起来,而值可以是下列任意一种形式:

  • 简单的字符串、数字、布尔值或空值(字符用双引号括起来):
    {"id":1, "name":"John Doe", "married":false}
  • 数组;括在方括号中,仍以逗号分隔的集合:
    {"primeNumbers":[2, 3, 5, 7, 11, 13, 17], "oddNumbers":[1,3,5,7]}
  • 对象,名称的集合,包含在大括号中:
    {"address":{"street":"145 Koinange Street", "City":"Nairobi", "Country":"Kenya"}}


JSON对象可以任意嵌套,以创建更复杂的对象:

{"user":
	{	"userid": 1900,
		"username": "jsmith",
		"password": "secret",
		"groups": [ "admins", "users", "maintainers"]
	}
}


有效的JSON格式

已定义的JSON语法(参看RFC 4627)中的介绍:

  • JSON对象封装在大括号内{ }。空对象可以表示为{ }
  • 数组封装在方括号内[ ]。空数组可以表示为 [ ]
  • 成员由一个键-值对代表
  • 成员中的键名应该使用双引号括起来
  • 每个成员都应该有一个对象结构中唯一的键
  • 值如果是字符串,则表示括在双引号中
  • 布尔值使用小写truefalse表示
  • 数字使用双精度浮点格式表示;支持科学记数法形式;数字前不应该有零
  • "攻击(冲突)"(像单、双引号、大、中括号等)性质的字符必须使用反斜杠进行转义
  • 空值由小写null表示
  • 其它类型,如日期,(JSON)本身不支持,应该由解析器/客户端处理转换为字符串
  • 对象或数组每个成员后面必须跟一个逗号,如果它不是最后一个的话
  • 常见的JSON文件扩展名是.json
  • JSON文件的MIME类型为application/json

实现

JSON实现不是很严格,更多的要求客户端应用程序/解析器来执行JSON标准。像往常一样编写代码:

  • be liberal in what you accept (自由接受
  • be strict (adhering to the standard) in what you send (发送时坚持标准)

JSON有两个主要实现方式:

官方JSON语法规范

此实现将严格遵守RFC4627以上规范,并且不允许出现偏差。

JavaScript语法

This implementation follows the implementation of the Javascript programming language and as such allows for a few deviations from the official specification. For example:

这个实现是Javascript编程语言的实现,因此允许与官方规范有偏差。例如:

  1. 允许未引用键名,如 {name: "John Doe" }
  2. 允许单、双引号引用键名,如 {'name': "John Doe", "language":'Pascal'}
  3. 允许最后一个成员后,跟随数组或对象,如 {"keywords":["if","begin","for",], "IDEs":["Lazarus","fpIDE","MSEide"],}

参看