此页面由社区从英文翻译而来。了解更多并加入 MDN Web Docs 社区。
JSON
Baseline Widely available *
This feature is well established and works across many devices and browser versions. It’s been available across browsers since 2015年7月.
* Some parts of this feature may have varying levels of support.
JSON 命名空间对象包含用于解析JavaScript 对象表示法(JSON)和将值转换为 JSON 字符串的静态方法。
In this article
描述
与大多数全局对象不同,JSON 不是一个构造函数。不能将它与new 运算符 一起使用,也不能将JSON 对象作为函数调用。JSON` 的所有属性和方法都是静态的(就像Math 对象一样)。
JavaScript 与 JSON 的区别
JSON 是一种语法,用来序列化对象、数组、数值、字符串、布尔值和null。它基于 JavaScript 语法,但与之不同:大部分 JavaScript不是 JSON。例如:
任何 JSON 文本都是有效的 JavaScript 表达式,但仅限于JSON 超集修订之后。在修订之前,U+2028 行分隔符和 U+2029 段分隔符允许在 JSON 的字符串字面量和属性键中使用;但在 JavaScript 字符串字面量中使用同样的分隔符会导致SyntaxError。
其他区别包括只允许双引号字符串,不支持undefined 或注释。对于希望使用基于 JSON 的更人性化配置格式的用户,有 Babel 编译器使用的JSON5,以及更常用的YAML。
在 JavaScript 对象字面量与 JSON 中,相同的文本可能代表不同的值。如需了解更多信息,请参阅对象字面量语法与 JSON 的对比。
完整的 JSON 语法
有效的 JSON 语法由以下语法正式定义,该语法用ABNF 表示,抄自IETF JSON 标准(RFC):
JSON-text = object / arraybegin-array = ws %x5B ws ; [ 左方括号begin-object = ws %x7B ws ; { 左大括号end-array = ws %x5D ws ; ] 右方括号end-object = ws %x7D ws ; } 右大括号name-separator = ws %x3A ws ; : 冒号value-separator = ws %x2C ws ; , 逗号ws = *( %x20 / ; 空格 %x09 / ; 垂直制表符 %x0A / ; 换行符 %x0D ; 回车符 )value = false / null / true / object / array / number / stringfalse = %x66.61.6c.73.65 ; falsenull = %x6e.75.6c.6c ; nulltrue = %x74.72.75.65 ; trueobject = begin-object [ member *( value-separator member ) ] end-objectmember = string name-separator valuearray = begin-array [ value *( value-separator value ) ] end-arraynumber = [ minus ] int [ frac ] [ exp ]decimal-point = %x2E ; .digit1-9 = %x31-39 ; 1-9e = %x65 / %x45 ; e Eexp = e [ minus / plus ] 1*DIGITfrac = decimal-point 1*DIGITint = zero / ( digit1-9 *DIGIT )minus = %x2D ; -plus = %x2B ; +zero = %x30 ; 0string = quotation-mark *char quotation-markchar = unescaped / escape ( %x22 / ; " 引号 U+0022 %x5C / ; \ 反斜杠 U+005C %x2F / ; / 正斜杠 U+002F %x62 / ; b 退格符 U+0008 %x66 / ; f 换页符 U+000C %x6E / ; n 换行符 U+000A %x72 / ; r 回车符 U+000D %x74 / ; t 制表符 U+0009 %x75 4HEXDIG ) ; uXXXX U+XXXXescape = %x5C ; \quotation-mark = %x22 ; "unescaped = %x20-21 / %x23-5B / %x5D-10FFFFHEXDIG = DIGIT / %x41-46 / %x61-66 ; 0-9, A-F, or a-f ; HEXDIG 等效于 [RFC5234] 中的 HEXDIG 规则DIGIT = %x30-39 ; 0-9 ; DIGIT 等效于 [RFC5234] 的 DIGIT 规则无关紧要的空白符可以出现在任何地方,但不包括在JSONNumber(数字不得包含空白)或JSONString(字符串中的相应字符会被解释为空白,否则会导致错误)中。制表符(U+0009)、回车符(U+000D)、换行符(U+000A)和空格(U+0020)字符是唯一有效的空白字符。
静态属性
JSON[Symbol.toStringTag][Symbol.toStringTag]属性的初始值为字符串"JSON"。该属性在Object.prototype.toString()中使用。
静态方法
JSON.parse()解析 JSON 字符串并返回对应的值,可以额外传入一个转换函数,用来将生成的值和其属性,在返回之前进行某些修改。
JSON.stringify()返回与指定值对应的 JSON 字符串,可以通过额外的参数,控制仅包含某些属性,或者以自定义方法来替换某些属性值。
示例
>示例 JSON
{ "browsers": { "firefox": { "name": "Firefox", "pref_url": "about:config", "releases": { "1": { "release_date": "2004-11-09", "status": "retired", "engine": "Gecko", "engine_version": "1.7" } } } }}你可以使用JSON.parse() 方法将上述 JSON 字符串转化为 JavaScript 对象:
const jsonText = `{ "browsers": { "firefox": { "name": "Firefox", "pref_url": "about:config", "releases": { "1": { "release_date": "2004-11-09", "status": "retired", "engine": "Gecko", "engine_version": "1.7" } } } }}`;console.log(JSON.parse(jsonText));规范
| Specification |
|---|
| ECMAScript® 2026 Language Specification> # sec-json-object> |