JSON/zh CN

From Free Pascal wiki
Jump to: navigation, search

English (en) suomi (fi) 日本語 (ja) 한국어 (ko) русский (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"],}

参看