(Translated by https://www.hiragana.jp/)
JSON - 维基百科,自由的百科全书 とべ转到内容ないよう

JSON

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん
JSON
扩展めい
.json
互联网媒体ばいたい类型
application/json
类型だいえいType codeTEXT
统一类型标识public.json
格式かくしき类型かずすえ交换
扩展JavaScript
标准RFC 7159, ECMA-404
网站json.org

JSON(JavaScript Object Notation, /ˈsən/, JavaScript物件ぶっけん表示法ひょうじほうゆかり美國びくにほどしき設計せっけいみちかくひしげ斯·かつかつぶくとく構想こうそう設計せっけいてきいちしゅ輕量けいりょうきゅう資料しりょう交換こうかん格式かくしき。其內ようよし屬性ぞくせい值所組成そせいいん此也ゆうえき於閱讀和處理しょりてき優勢ゆうせい。JSON獨立どくりつほどしきげんてき资料格式かくしき,其不僅是JavaScriptてきしゅう,也採用さいようりょうCげん家族かぞくてき習慣しゅうかん用法ようほう目前もくぜん也有やゆう許多きょたほどしきげんのう夠將其解析かいせき和字わじくし,其廣泛使用しようてき程度ていど也使其成ため通用つうようてき資料しりょう格式かくしき

簡介

[编辑]

JSON格式かくしき1999ねんJavaScript Programming Language, Standard ECMA-262 3rd Editionてき集合しゅうごう所以ゆえん以在JavaScripteval()はこしき(javascriptどおり过eval()调用解析かいせき)读入。过这并不代表だいひょうJSON无法使用しよう于其语言,こと实上几乎所有しょゆうあずか网络开发しょう关的语言ゆうJSONはこしき库。

JSONてき基本きほんすうすえ类型:

  • かず值:じゅう进制すう不能ふのうゆうぜん导0,以为负数,以有小数しょうすう部分ぶぶん。还可以用eあるものE表示ひょうじ指数しすう部分ぶぶん不能ふのう包含ほうがんかず,如NaN。区分くぶん整数せいすうあずか浮点すう。JavaScriptようそう精度せいど浮点すう表示ひょうじ所有しょゆうすう值(きさきらい支持しじ BigInt[1])。
  • くし:以双引号""くくおこりらいてきれい个或Unicode码位支持しじはんはすゆずりは开始てき转义序列じょれつ
  • ぬの尔值:表示ひょうじtrueあるものfalse
  • 陣列じんれつゆうじょてきれい个或しゃ个值。まい个值以为任意にんい类型。かず使用しようかたくくごう[]つつみ裹。个数组元素之もとゆき间用逗号,ぶんへだたかたち如:[value, value]
  • 物件ぶっけん若干じゃっかん无序てき“键-值对”(key-value pairs),其中键只のうくし[2]けん议但强制きょうせい要求ようきゅう对象ちゅうてき键是どくいち无二てき。对象以花くくごう{}つつみ裹。个键-值对使用しよう逗号,ぶんへだた。键与值之间用おかせごう:ぶんへだた
  • そら值:值写为null

token(6种标てん符号ふごうくしかず值、3种字めんりょう间可以存在そんざい有限ゆうげんてき空白くうはく并被ゆるがせりゃく。四个特定字符被认为是空白符:そらかく水平すいへいせいひょうかい车符换行空白くうはく不能ふのう现在token内部ないぶただしそらかく以出现在くし内部ないぶ)。JSON标准まこと许有节序掩码提供ていきょうちゅう释的句法くほういち有效ゆうこうてきJSONぶん档的节点必须一个对象或一个数组。

JSON交换时必须编码为UTF-8[3]转义序列じょれつ以为:“\\”、“\"”、“\/”、“\b”、“\f”、“\n”、“\r”、“\t”,あるUnicode16进制转义序列じょれつ(\uきさきめん跟随416进制数字すうじ)。对于不在ふざい基本きほんぶんしゅ平面へいめんうえてき码位,必须ようUTF-16代理だいり对(surrogate pair)表示ひょうじれい如对于Emoji——ごく而泣てき表情ひょうじょうU+1F602 😂 FACE WITH TEARS OF JOYざいJSONちゅう表示ひょうじ为:

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

JSONてき格式かくしき描述參考さんこうRFC 4627。

历史

[编辑]

JSON げん于对实时ふく务器いた浏览かい通信つうしん协议てき需求,无需使用しよう Flash ある Java しょうほどじょとう浏览插件,这是 2000 年代ねんだい初期しょき使用しようてき主要しゅよう方法ほうほう

Crockford くびさき指定してい普及ふきゅうりょう JSON 格式かくしき。这个缩写词起げん于 State Software,这是一家いっかよし Crockford 他人たにん于 2001 ねん 3 がつ共同きょうどう创立てき公司こうし。联合创始じん同意どうい构建一个使用标准浏览器功能的系统,并为 Web 开发じん提供ていきょう一个抽象层来创建有状态的 Web 应用ほどじょ,该应ようほどじょ具有ぐゆう どおり保持ほじ两个超文ちょうぶんほん传输协议 (HTTP) 连接开并ざい标准浏览ちょう时之まえ(如果ぼつゆう进一步交换数据)回收かいしゅう这些连接,实现与 Web ふく务器てき持久じきゅうそうこう连接。 联合创始じん进行りょう讨论,并投票とうひょう决定しょうすうすえ格式かくしき命名めいめい为 JSML(JavaScript 标记语言)还是 JSON(JavaScript 对象表示法ひょうじほう),以及ざいなん种许类型提供ていきょう该格しき。 JSON.org 网站于 2001 ねん推出。

JSON 库的前身ぜんしんよう于Cartoon Networkてき Communities.com 上名かみみょう为“Cartoon Orbit”てき儿童数字すうじ资产交易こうえきゆう戏项(State 联合创始じんぜん曾在这家公司こうし工作こうさく过),该项 使用しよう具有ぐゆう专有消息しょうそく格式かくしきてき浏览はし插件らい操作そうさ DHTML 元素げんそ(该系统也ぞく于 3DO)。 ざい发现早期そうきてき Ajax こうのうきさき,digiGroups、Noosh とう公司こうし使用しようかまちはたしんじいき传递到よう户浏览器てき视野ちゅう,而无需刷新さっしん Web 应用ほどじょてき视觉上下じょうげぶん,仅使用しよう标准 HTTP、HTML JavaScript こうのうそく实现实时丰富てき Web 应用ほどじょ Netscape 4.0.5+ かず IE 5+。 Crockford ずいきさき发现 JavaScript 以用さく此类けい统的もと于对ぞうてき消息しょうそく传递格式かくしき。 该系统被售给 Sun Microsystems、Amazon.com EDS。

应用领域

[编辑]

Metadata

[编辑]

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さく为其すうすえそん储格しき较出めいてき产品ゆうMongoDBCouchDBRavenDBえい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":
               {
                    "text": "something"
               }
          }
     },
     {
          "translate": "item.dirt.name",
          "color": "blue",
          "bold": false,
          "italic": true
     }
]

操作性そうさせいわる

[编辑]

RFC 8259页面そん档备份そん互联网档あん)描述りょう JSON 语法てきぼう些方めんつきかん这些方面ほうめん符合ふごう规范,ただし可能かのうかい导致互操作性そうさせいわる问题。

  • ぼう些 JSON 实现仅接受せつじゅ表示ひょうじ对象あるすう组的 JSON ぶんほん。为了实现互操作性そうさせいわる,交换 JSON てき应用ほどじょ应传输对かたどあるすう组形しきてき消息しょうそく
  • 该规范允许 JSON 对象包含ほうがん具有ぐゆうしょうどう名称めいしょうてきなり员。处理具有ぐゆうじゅう名称めいしょうてき对象てき实现てきぎょう为是不可ふか预测てき。为了实现互操作性そうさせいわる,应用ほどじょざい传输 JSON 对象时应避免じゅう名称めいしょう
  • 规范とく别指 JSON 对象ちゅうなり员的顺序并不重要じゅうよう。为了实现互操作性そうさせいわる,应用ほどじょ应该避免为成员排じょ赋予含义,そく使つかい解析かいせき软件使该排じょ见。
  • 虽然规范对 JSON 数字すうじ文字もじてき大小だいしょうある精度せいどぼつ有限ゆうげんせいただし广泛使用しようてき JavaScript 实现はた它们そん储为 IEEE754“binary64”数量すうりょう。为了实现互操作性そうさせいわる,应用ほどじょ应避めん传输无法以这种方しき表示ひょうじてき数字すうじれい如 1E400 ある 3.141592653589793238462643383279。
  • 虽然规范きりせい JSON ぶん本中ほんなか Unicode てき编码,ただし绝大多数たすう实现さいようUTF-8编码;为了实现互操作性そうさせいわる,应用ほどじょ应始终且仅使用しよう UTF-8 对 JSON 消息しょうそく进行编码。
  • 该规范并禁止きんし传输不能ふのうせい表示ひょうじ Unicode てき序列じょれつ。为了实现互操作性そうさせいわる,应用ほどじょ应传输不包含ほうがん此类序列じょれつてき消息しょうそく
  • 该规范不げんせい应用ほどじょ如何いか较 Unicode くし。为了实现互操作性そうさせいわる,应用ほどじょ应始终逐个代码单もと执行此类较。

2015 ねん,IETF 发布りょうRFC7493页面そん档备份そん互联网档あん),描述りょう“I-JSON 消息しょうそく格式かくしき”,这是 JSON てき受限配置はいちぶんけん,它限せいりょう JSON てき语法处理,以尽可能かのう避免这些互操作性そうさせいわる问题

安全あんぜん問題もんだい

[编辑]

读取JSON

[编辑]

よし於JSONJavaScriptてきしゅう所以ゆえん一般いっぱん都會とかい使用しよう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方法ほうほう进行读取[4]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さらしょうたくみ,以及浏览てきないけん快速かいそく解析かいせき支持しじ使つかいとく其更适用于网络数すえ传输领域。

YAML

[编辑]

ざいこうのう语法じょう,JSON YAML 语言てきいち个子しゅうとく别是,YAML 1.2规范指定していにんなんJSON格式かくしきてきぶんけんみやこただしYAML格式かくしきてき有效ゆうこうぶんけん"。さいつね见的YAML解析かいせき也能够处JSON。版本はんぽん 1.2 まえてき YAML 规范ぼつゆう完全かんぜん涵盖 JSON,主要しゅようよし于 YAML ちゅう缺乏けつぼうほんつくえ UTF-32 支持しじ,以及对逗ごうぶんへだたそらかくてき要求ようきゅう;此外,JSON 规范还包括ほうかつ /* */ 样式てきちゅう释。YAML さい重要じゅうようてき别是语法扩展しゅう,它们ざい JSON ちゅうぼつゆう类似ぶつ:关系すうすえ支持しじざい YAML ぶん档中,以引よう以前いぜんざいぶんけん/りゅうちゅう找到てき锚点;つう过这种方しき,您可以表达递归结构。支持しじじょもともと外的がいてき扩展すうすえ类型,如字くし数字すうじぬの尔值とう支持しじ带缩进的块语ほう;它允许您ざい使用しよう必要ひつようてき符号ふごうてきじょう况下描述结构すうすえかく种括ごう、引号とう

MessagePack

[编辑]

MessagePackせんしょうJSONさら短小たんしょう快速かいそく

格式かくしき工具こうぐ

[编辑]

JSON格式かくしきだいりょうXML给网络传输带らいりょう很大てき便利べんりただし却没ゆうりょうXMLてきいちもくりょうしかゆう其是JSONすうすえ很长てき时候,かい让人おちいにゅうしげる琐复杂的すうすえ节点查找ちゅう。开发しゃ以通过在线JSON格式かくしき工具こうぐらいさら方便ほうべんてき对JSONすうすえ进行节点查找解析かいせき

參考さんこう文獻ぶんけん

[编辑]
  1. ^ BigInt - MDN Web Docs Glossary: Definitions of Web-related terms | MDN. developer.mozilla.org. 2023-06-08 [2023-06-12]. (原始げんし内容ないようそん于2023-02-03) 美国びくにえい语). 
  2. ^ MDN-JSON标准. [2021-10-30]. (原始げんし内容ないようそん档于2022-04-03). 
  3. ^ The JavaScript Object Notation (JSON) Data Interchange Format. IETF. December 2017 [16 February 2018]. (原始げんし内容ないようそん档于2021-01-20). 
  4. ^ JSON and Browser Security. [2007-07-14]. (原始げんし内容ないようそん档于2020-07-16). 
  1. Apple捷徑しょうけい页面そん档备份そん互联网档あん

まいり

[编辑]

外部がいぶ連結れんけつ

[编辑]