JavaScript Object Notation
JSONはXMLと違ってマークアップ言語ではない。ウェブブラウザから利用できるという点では共通している。また両者とも巨大なバイナリデータを扱う仕組みがないことが共通している。
JSONはウェブブラウザなどでよく使われているECMA-262, revision 3準拠のJavaScript (ECMAScript) をベースとしている。2006年7月にRFC 4627で仕様が規定され、その後、何度か改定され、2017年12月14日にIETF STD 90およびRFC 8259およびECMA-404 2nd editionが発表された。MIMEタイプは application/json、拡張子はjsonとされた。
IETFおよびECMAおよびISOの仕様の改定の歴史
2006年7月 - RFC 4627
2013年3月 - RFC 7158
2013年10月 - ECMA-404 1st edition
2014年3月 - RFC 7159
2017年11月30日 - ISO/IEC 21778:2017
2017年12月14日 - RFC 8259 および IETF STD 90 および ECMA-404 2nd edition
JSONはJavaScriptにおけるオブジェクト表記法のサブセットであるが、JavaScriptでの利用に限られたものではない。
JSONは単純であるので、特にAjaxの分野で利用が広がりつつある。
JSONはYAMLのサブセットと見なしてよい。YAMLにはブロック形式とインライン形式(フロー形式)の表記法があるが、JSONは後者にさらに制約を加えたものと捉えることができる。例えばRubyでは以下のようにしてJSONをYAMLとして読み込むことができる:
the_object = YAML.load('{"name": "John Smith", "age": 33}')
YAML 1.1以前は、配列と連想配列の区切りをそれぞれ , のようにカンマ+スペースの形にすることでJSONのスーパーセットとなったが、YAML 1.2では区切り文字も互換となったため、正常なJSON文書においては公式に完全なスーパーセットとなった。僅かな相違点として、連想配列のキーがユニークであるべきことをJSONではSHOULDレベルで要請するのに対し、YAML 1.2ではMUSTレベルで要請している為、該当する異常データのエラーハンドリングに違いが出る可能性はある。