fbpx
维基百科

JSON

JSONJavaScript Object Notation, /ˈsən/)是由道格拉斯·克羅克福特構想和設計的一種輕量級資料交換格式。其內容由屬性和值所組成,因此也有易於閱讀和處理的優勢。JSON是獨立於程式語言资料格式,其不僅是JavaScript的子集,也採用了C語言家族的習慣用法,目前也有許多程式語言都能夠將其解析和字串化,其廣泛使用的程度也使其成為通用的資料格式。

JSON
扩展名.json
互联网媒体类型application/json
类型代码英语Type codeTEXT
统一类型标识public.json
格式类型数据交换
扩展自JavaScript
标准RFC 7159, ECMA-404
网站json.org

簡介

JSON格式是1999年《JavaScript Programming Language, Standard ECMA-262 3rd Edition》的子集合,所以可以在JavaScripteval()函式(javascript通过eval()调用解析器)读入。不过这并不代表JSON无法使用于其他语言,事实上几乎所有与网络开发相关的语言都有JSON函式库。

JSON的基本数据类型:

  • 数值:十进制数,不能有前导0,可以为负数,可以有小数部分。还可以用e或者E表示指数部分。不能包含非数,如NaN。不区分整数与浮点数。JavaScript用双精度浮点数表示所有数值。
  • 字串:以双引号""括起来的零个或多个Unicode码位。支持反斜杠开始的转义字符序列
  • 布尔值:表示为true或者false
  • 陣列:有序的零个或者多个值。每个值可以为任意类型。数组使用方括号[]包裹。多个数组元素之间用逗号,分隔,形如:[value, value]
  • 物件:若干无序的“键-值对”(key-value pairs),其中键只能是字符串[1]。建议但不强制要求对象中的键是独一无二的。对象以花括号{}包裹。多个键-值对之间使用逗号,分隔。键与值之间用冒号:分隔。
  • 空值:值写为null

token(6种标点符号、字符串、数值、3种字面量)之间可以存在有限的空白符并被忽略。四个特定字符被认为是空白符:空格符水平制表符回车符换行符。空白符不能出现在token内部(但空格符可以出现在字符串内部)。JSON标准不允许有字节序掩码,不提供注释的句法。 一个有效的JSON文档的根节点必须是一个对象或一个数组。

JSON交换时必须编码为UTF-8[2]转义序列可以为:“\\”、“\"”、“\/”、“\b”、“\f”、“\n”、“\r”、“\t”,或Unicode16进制转义字符序列(\u后面跟随4位16进制数字)。对于不在基本多文種平面上的码位,必须用UTF-16代理对(surrogate pair)表示,例如对于Emoji字符——喜極而泣的表情(U+1F602 😂 FACE WITH TEARS OF JOY)在JSON中应表示为:

{ "face": "😂" } // or { "face": "\uD83D\uDE02" } 

JSON的格式描述可以參考RFC 4627。

应用领域

元数据和架构

JSON文本的官方媒体类型是双引号,这一点在大多数现代的安装中都采用了这种类型。由于传统原因,许多服务提供商、浏览器、服务器、Web 应用程序、库、框架和API也支持非官方的 MIME 类型 或内容类型。值得注意的例子包括谷歌搜索API,雅虎,脸书的API,Lift,和Dojo Toolkit。JSON 架构指定一种基于 JSON 的格式,用于定义用于验证、文档和交互控制的 JSON 数据的结构。它为给定应用程序所需的 JSON 数据以及如何修改该数据提供协定。JSON架构基于XML架构(XSD)中的概念,但基于JSON。与在 XSD 中一样,相同的序列化/反序列化工具可用于架构和数据,并且它是自描述的。它在IETF的互联网草案中指定,目前为2020-12年草案,于2021年1月28日发布。有几个验证器可用于不同的编程语言,每个验证器都有不同程度的一致性。标准文件扩展名为 .json。JSON 标准不支持对象引用,但存在基于 JSON 的对象引用的 IETF 草案标准。

WEB开发

JSON最开始被广泛的应用于WEB应用的开发。不過目前JSON使用在JavaScriptJavaNode.jsC#應用的情況比較多,PHP等開發的WEB應用主要還是使用XML

NoSQL数据库

相对于传统的关系型数据库,一些基于文档存储的NoSQL非关系型数据库选择JSON作为其数据存储格式,比较出名的产品有:MongoDBCouchDB、RavenDB等。

举例

{  "firstName": "John",  "lastName": "Smith",  "sex": "male",  "age": 25,  "address":   {  "streetAddress": "21 2nd Street",  "city": "New York",  "state": "NY",  "postalCode": "10021"  },  "phoneNumber":   [  {  "type": "home",  "number": "212 555-1234"  },  {  "type": "fax",  "number": "646 555-4567"  }  ]  } 

这种JSON格式也被不少游戏(如Minecraft)或應用軟體用来当作的部分数据存储的格式:

[  {  "text": "This is the text",  "color": "dark_red",  "bold": "true",  "strikethough": "true",  "clickEvent":  {  "action": "open_url",  "value": "zh.wikipedia.org"  },  "hoverEvent":  {  "action": "show_text",  "value":  {  "extra": "something"  }  }  },  {  "translate": "item.dirt.name",  "color": "blue",  "italic": "true"  } ] 

安全問題

读取JSON

由於JSON是JavaScript的子集,所以一般都會使用eval()作為讀取資料的方式,如果是针对可靠的数据来源,在不支持原生JSON解析的浏览器上面这是最快速的方法。然而由于eval方法同样可以执行任意的JavaScript代码,因此当数据来源不可靠时则可能产生安全问题。如下面的例子,直接用eval执行时会跳转:

var json= eval("{message:(function (){ window.location='http://zh.wikipedia.org/wiki/JSON#.E5.AE.89.E5.85.A8.E6.80.A7.E5.95.8F.E9.A1.8C'; })()}"); 

其中一種防止不安全程式碼出現的解決辦法,是通过浏览器原生支持的JSON.parse(str)方法讀取JSON資料,目前已经得到大部分主流浏览器的支持(IE8+,Firefox 3.5+,Chrome4+/Safari4+,Opera10+),在不支持原生JSON对象的浏览器上面可以使用parseJSON方法进行读取[3]parseJSON採用解析器驗證讀入的程式碼是否真的是JSON程式碼,這樣就更安全。但由於這是用模擬的方式讀取,速度上會比eval()慢。

跨站存取問題

另外一個安全上的問題則是跨站請求偽造(Cross-site request forgery,簡稱CSRF或XSRF)。這個問題在Javascript中的狀況是,由於Javascript採用了稱為「沙盒」的機制,這種機制限制Javascript引擎僅能引入同一個站點的程式碼,因而某種程度上提高了安全性。

與其他格式的比較

XML

JSON與XML最大的不同在於XML是一個完整的標記語言,而JSON不是。這使得XML在程式判讀上需要比較多的功夫。主要的原因在於XML的設計理念與JSON不同。XML利用標記語言的特性提供了絕佳的延展性(如XPath),在数据存储,扩展及高级检索方面具备对JSON的优势,而JSON则由于比XML更加小巧,以及浏览器的内建快速解析支持,使得其更适用于网络数据传输领域。

MessagePack

MessagePack宣称比JSON更短小,快速。

格式化工具

JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,会让人陷入繁琐复杂的数据节点查找中。开发者可以通过在线JSON格式化工具,来更方便的对JSON数据进行节点查找和解析。

參考文獻

  1. ^ . [2021-10-30]. (原始内容存档于2022-04-03). 
  2. ^ . IETF. December 2017 [16 February 2018]. (原始内容存档于2021-01-20). 
  3. ^ . [2007-07-14]. (原始内容存档于2020-07-16). 
  1. Apple捷徑 (页面存档备份,存于互联网档案馆

參閱

外部連結

json, 此條目需要补充更多来源, 2017年5月11日, 请协助補充多方面可靠来源以改善这篇条目, 无法查证的内容可能會因為异议提出而移除, 致使用者, 请搜索一下条目的标题, 来源搜索, 网页, 新闻, 书籍, 学术, 图像, 以检查网络上是否存在该主题的更多可靠来源, 判定指引, javascript, object, notation, 是由道格拉斯, 克羅克福特構想和設計的一種輕量級資料交換格式, 其內容由屬性和值所組成, 因此也有易於閱讀和處理的優勢, 是獨立於程式語言的资料格式, 其不僅是javas. 此條目需要补充更多来源 2017年5月11日 请协助補充多方面可靠来源以改善这篇条目 无法查证的内容可能會因為异议提出而移除 致使用者 请搜索一下条目的标题 来源搜索 JSON 网页 新闻 书籍 学术 图像 以检查网络上是否存在该主题的更多可靠来源 判定指引 JSON JavaScript Object Notation ˈ dʒ eɪ s en 是由道格拉斯 克羅克福特構想和設計的一種輕量級資料交換格式 其內容由屬性和值所組成 因此也有易於閱讀和處理的優勢 JSON是獨立於程式語言的资料格式 其不僅是JavaScript的子集 也採用了C語言家族的習慣用法 目前也有許多程式語言都能夠將其解析和字串化 其廣泛使用的程度也使其成為通用的資料格式 JSON扩展名 json互联网 媒体类型application json类型代码 英语 Type code TEXT统一类型标识public json格式类型数据交换扩展自JavaScript标准RFC 7159 ECMA 404网站json wbr org 目录 1 簡介 2 应用领域 2 1 元数据和架构 2 2 WEB开发 2 3 NoSQL数据库 3 举例 4 安全問題 4 1 读取JSON 4 2 跨站存取問題 5 與其他格式的比較 5 1 XML 5 2 MessagePack 5 3 格式化工具 6 參考文獻 7 參閱 8 外部連結簡介 编辑JSON格式是1999年 JavaScript Programming Language Standard ECMA 262 3rd Edition 的子集合 所以可以在JavaScript以eval 函式 javascript通过eval 调用解析器 读入 不过这并不代表JSON无法使用于其他语言 事实上几乎所有与网络开发相关的语言都有JSON函式库 JSON的基本数据类型 数值 十进制数 不能有前导0 可以为负数 可以有小数部分 还可以用 b e b 或者 b E b 表示指数部分 不能包含非数 如NaN 不区分整数与浮点数 JavaScript用双精度浮点数表示所有数值 字串 以双引号 b b 括起来的零个或多个Unicode码位 支持反斜杠开始的转义字符序列 布尔值 表示为true或者false 陣列 有序的零个或者多个值 每个值可以为任意类型 数组使用方括号 b b 包裹 多个数组元素之间用逗号 b b 分隔 形如 value value 物件 若干无序的 键 值对 key value pairs 其中键只能是字符串 1 建议但不强制要求对象中的键是独一无二的 对象以花括号 b b 包裹 多个键 值对之间使用逗号 b b 分隔 键与值之间用冒号 b b 分隔 空值 值写为nulltoken 6种标点符号 字符串 数值 3种字面量 之间可以存在有限的空白符并被忽略 四个特定字符被认为是空白符 空格符 水平制表符 回车符 换行符 空白符不能出现在token内部 但空格符可以出现在字符串内部 JSON标准不允许有字节序掩码 不提供注释的句法 一个有效的JSON文档的根节点必须是一个对象或一个数组 JSON交换时必须编码为UTF 8 2 转义序列可以为 b f n r t 或Unicode16进制转义字符序列 u后面跟随4位16进制数字 对于不在基本多文種平面上的码位 必须用UTF 16代理对 surrogate pair 表示 例如对于Emoji字符 喜極而泣的表情 U 1F602 FACE WITH TEARS OF JOY 在JSON中应表示为 face or face uD83D uDE02 JSON的格式描述可以參考RFC 4627 应用领域 编辑元数据和架构 编辑 JSON文本的官方媒体类型是双引号 这一点在大多数现代的安装中都采用了这种类型 由于传统原因 许多服务提供商 浏览器 服务器 Web 应用程序 库 框架和API也支持非官方的 MIME 类型 或内容类型 值得注意的例子包括谷歌搜索API 雅虎 脸书的API Lift 和Dojo Toolkit JSON 架构指定一种基于 JSON 的格式 用于定义用于验证 文档和交互控制的 JSON 数据的结构 它为给定应用程序所需的 JSON 数据以及如何修改该数据提供协定 JSON架构基于XML架构 XSD 中的概念 但基于JSON 与在 XSD 中一样 相同的序列化 反序列化工具可用于架构和数据 并且它是自描述的 它在IETF的互联网草案中指定 目前为2020 12年草案 于2021年1月28日发布 有几个验证器可用于不同的编程语言 每个验证器都有不同程度的一致性 标准文件扩展名为 json JSON 标准不支持对象引用 但存在基于 JSON 的对象引用的 IETF 草案标准 WEB开发 编辑 JSON最开始被广泛的应用于WEB应用的开发 不過目前JSON使用在JavaScript Java Node js C 應用的情況比較多 PHP等開發的WEB應用主要還是使用XML NoSQL数据库 编辑 相对于传统的关系型数据库 一些基于文档存储的NoSQL非关系型数据库选择JSON作为其数据存储格式 比较出名的产品有 MongoDB CouchDB RavenDB等 举例 编辑 firstName John lastName Smith sex male age 25 address streetAddress 21 2nd Street city New York state NY postalCode 10021 phoneNumber type home number 212 555 1234 type fax number 646 555 4567 这种JSON格式也被不少游戏 如Minecraft 或應用軟體用来当作的部分数据存储的格式 text This is the text color dark red bold true strikethough true clickEvent action open url value zh wikipedia org hoverEvent action show text value extra something translate item dirt name color blue italic true 安全問題 编辑读取JSON 编辑 由於JSON是JavaScript的子集 所以一般都會使用eval 作為讀取資料的方式 如果是针对可靠的数据来源 在不支持原生JSON解析的浏览器上面这是最快速的方法 然而由于eval方法同样可以执行任意的JavaScript代码 因此当数据来源不可靠时则可能产生安全问题 如下面的例子 直接用eval执行时会跳转 var json eval message function window location http zh wikipedia org wiki JSON E5 AE 89 E5 85 A8 E6 80 A7 E5 95 8F E9 A1 8C 其中一種防止不安全程式碼出現的解決辦法 是通过浏览器原生支持的JSON parse str 方法讀取JSON資料 目前已经得到大部分主流浏览器的支持 IE8 Firefox 3 5 Chrome4 Safari4 Opera10 在不支持原生JSON对象的浏览器上面可以使用parseJSON方法进行读取 3 parseJSON採用解析器驗證讀入的程式碼是否真的是JSON程式碼 這樣就更安全 但由於這是用模擬的方式讀取 速度上會比eval 慢 跨站存取問題 编辑 另外一個安全上的問題則是跨站請求偽造 Cross site request forgery 簡稱CSRF或XSRF 這個問題在Javascript中的狀況是 由於Javascript採用了稱為 沙盒 的機制 這種機制限制Javascript引擎僅能引入同一個站點的程式碼 因而某種程度上提高了安全性 與其他格式的比較 编辑XML 编辑 JSON與XML最大的不同在於XML是一個完整的標記語言 而JSON不是 這使得XML在程式判讀上需要比較多的功夫 主要的原因在於XML的設計理念與JSON不同 XML利用標記語言的特性提供了絕佳的延展性 如XPath 在数据存储 扩展及高级检索方面具备对JSON的优势 而JSON则由于比XML更加小巧 以及浏览器的内建快速解析支持 使得其更适用于网络数据传输领域 MessagePack 编辑 MessagePack宣称比JSON更短小 快速 格式化工具 编辑 JSON格式取代了XML给网络传输带来了很大的便利 但是却没有了XML的一目了然 尤其是JSON数据很长的时候 会让人陷入繁琐复杂的数据节点查找中 开发者可以通过在线JSON格式化工具 来更方便的对JSON数据进行节点查找和解析 參考文獻 编辑 MDN JSON标准 2021 10 30 原始内容存档于2022 04 03 The JavaScript Object Notation JSON Data Interchange Format IETF December 2017 16 February 2018 原始内容存档于2021 01 20 JSON and Browser Security 2007 07 14 原始内容存档于2020 07 16 Apple捷徑 页面存档备份 存于互联网档案馆 參閱 编辑JSONP AJAX JavaScript YAML HOCON外部連結 编辑 英文 JSON 页面存档备份 存于互联网档案馆 關於JSON的規格 文件 以及在其他語言實做的資訊 JSON中文说明 页面存档备份 存于互联网档案馆 英文 RFC 4627 JSON在RFC裡的規格 JSON格式化工具 中文 页面存档备份 存于互联网档案馆 JSON编辑器 页面存档备份 存于互联网档案馆 JSON分析器 页面存档备份 存于互联网档案馆 JSON到CSV转换器 页面存档备份 存于互联网档案馆 Minecraft指令 JSON文字格式 页面存档备份 存于互联网档案馆 JSON在线格式化工具 取自 https zh wikipedia org w index php title JSON amp oldid 75836725, 维基百科,wiki,书籍,书籍,图书馆,

文章

,阅读,下载,免费,免费下载,mp3,视频,mp4,3gp, jpg,jpeg,gif,png,图片,音乐,歌曲,电影,书籍,游戏,游戏。