JSON
基于文本的、独立于编程语言的、结构化数据表示格式
文本上下文中存在的一种数据表示格式(对应用JS编程语言就是字符串类型中存在的一种数据表示格式)
狭义上指表示结构化数据的格式(本质)
广义上指用该格式表示的数据(外延)
通常用于数据交换
在编程语言层面处理时,都是以字符串(文本)形式存在
概念
Object literal
指大括号 ({}) 扩起来的零或多个键值对
独立于编程语言的定义
String literal
指双引号 (“) 或单引号 (‘) 括起来的零或多个字符
JSON object
不存在通常所说的JSON对象这个概念
准确说应该是 面向对象编程语言中 用于处理JSON格式数据的 内置对象。将数据在 字符串(文本)上下文 和 对象上下文 之间转换,即由 字符串字面量 转换为 对象字面量
- 字符串(文本)上下文即从外部获取到的JSON格式数据(http请求、文件、数据库等),此时数据以字符串类型存在。
- 对象上下文即以面向对象编程语言中的对象类型来处理该数据
JS中用于处理 JSON格式数据 的内置对象为JSON,包括
parse
和stringify
两个方法parse
将 JSON格式的字符串 转换为 对象字面量stringify
将 对象字面量 转换为 JSON格式的字符串1
2JSON.stringify({name:'xm',age:12})
"{\"name\":\"xm\",\"age\":12}"
JSON string
双引号扩起来的字符串
内部的双引号则需要转义
参考
格式
根节点为对象或数组
值
是双引号括起来的字符串(string)、数值(number)、true
、false
、 null
、对象(object)或者数组(array)
数据类型
对象
无序键值对的集合,键只能是字符串。以花括号{
开始,以}
结束,键值之间用冒号分割,键值对之间用逗号分割
数组
有序值的集合,值可以为任意类型。以中括号[
开始,以]
结束,值之间用逗号分割
数值
十进制数,不能有前导0,可以为负数,可以有小数部分。还可以用e
或者E
表示指数部分。不能包含非数,如NaN。不区分整数与浮点数。JavaScript用双精度浮点数表示所有数值
字符串
以双引号””括起来的零个或多个Unicode码位。支持反斜杠开始的转义字符序列
布尔值
空值
编码
JSON交换时必须编码为UTF-8。
转义序列可以为:“\”、“"”、“/”、“\b”、“\f”、“\n”、“\r”、“\t”,或 Unicode16 进制转义字符序列(\u后面跟随4位16进制数字)。对于不在基本多文种平面上的码位,必须用 UTF-16 代理对(surrogate pair)表示
1 | { "face": "😂" } |
应用领域
WEB应用开发
目前JSON使用在JavaScript、Java、Node.js、C#应用的情况比较多,PHP等开发的WEB应用主要还是使用XML
NoSQL数据库
基于文档存储的NoSQL非关系型数据库选择JSON作为其数据存储格式,比较出名的产品有:MongoDB