JavaScript Object Notation
JavaScript Object Notation(JSON、ジェイソン)はデータ
.json | |
MIMEタイプ | application/json |
Data interchange | |
IETF STD 90 RFC 8259 ECMA-404 2nd edition ISO/IEC 21778:2017 |
特徴
JSONはウェブブラウザなどでよくapplication/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日 [3] - RFC 8259 および IETF STD 90 および ECMA-404 2nd edition
JSONはJavaScriptにおけるオブジェクト
JSONはeval
JSON.parse()
を
JavaScript
JSONの発見
ダグラス・クロックフォードはJavaScriptのプログラマで、JSONを
表記 方法
JSONでtrue
, false
, null
などは
- オブジェクト(
順序 づけされていないキーと値 のペアの集 まり。JSONでは連想 配列 と等価 ) 配列 (データのシーケンス)数値 (整数 、浮動 小数点 数 )文字 列 (バックスラッシュによるエスケープシーケンス記法 を含 む、ダブルクォーテーション"
でくくった文字 列 )真偽 値 (true
とfalse
)null
1.0e-10
といった
["milk", "bread", "eggs"]
オブジェクトはキーと
{"name": "John Smith", "age": 33}
ここで
{name: "John Smith", age: 33}
という
プログラム"
を"
は"
であり、hello
であって"hello"
ではない。JSONのJSON.stringify
)を
const invalidJSON = "hello";
const validJSON = '"hello"';
JSON.parse(invalidJSON)
// Thrown:
// SyntaxError: Unexpected token h in JSON at position 0
JSON.parse(validJSON)
// 'hello'
// safe JSON generation
const output = JSON.stringify("hello")
output
// '"hello"'
エンコーディング
RFC 8259より、
AjaxにおけるJSONの利用
AjaxにおいてXMLHttpRequestで
古典 的 な例
var the_object;
var http_request = new XMLHttpRequest();
http_request.open( "GET", url, true );
http_request.onreadystatechange = function () {
if ( http_request.readyState == 4 ) {
if ( http_request.status == 200 ) {
the_object = eval( "(" + http_request.responseText + ")" );
} else {
alert( "There was a problem with the URL." );
}
http_request = null;
}
};
http_request.send(null);
新 しい記法 を利用 した例
var the_object;
var http_request = new XMLHttpRequest();
http_request.open( "GET", url, true );
http_request.responseType = "json";
http_request.addEventListener ( "load", function ( ev ) {
if ( ev.target.status == 200 ) {
the_object = http_request.response;
} else {
alert( "There was a problem with the URL." );
}
delete http_request;
});
http_request.send(null);
ここでいずれも、http_request
はXMLHttpRequestオブジェクトであり、それを url
にアクセスしてthe_object
にX-JSON
ヘッダを
ライブラリ
JSONは
ただし、テキストファイル、データを
JSONPath
JSONPath は JSON のクエリ
$.users[0:2].name
の["Foo", "Bar"]
になる。
{
"users": [
{"name": "Foo"},
{"name": "Bar"},
{"name": "Baz"}
]
}
改行 区切 りのJSON
1
- JSON Lines (JSONL)[15] -
拡張子 は .jsonl 、MIMEタイプは application/jsonl - Newline delimited JSON (NDJSON)[16](
旧称 Line delimited JSON, LDJSON[17])-拡張子 は .ndjson 、MIMEタイプは application/x-ndjson
Comma-Separated Values よりも
{"ts":"2020-06-18T10:44:12","started":{"pid":45678}}
{"ts":"2020-06-18T10:44:13","logged_in":{"username":"foo"},"connection":{"addr":"1.2.3.4","port":5678}}
{"ts":"2020-06-18T10:44:15","registered":{"username":"bar","email":"bar@example.com"},"connection":{"addr":"2.3.4.5","port":6789}}
{"ts":"2020-06-18T10:44:16","logged_out":{"username":"foo"},"connection":{"addr":"1.2.3.4","port":5678}}
JSON5
ECMAScript 5.1 に
// コメント
{a: 1,}
他 のデータ記述 法 との関係
- XML
- JSONはXMLと
違 ってマークアップ言語 ではない。ウェブブラウザから利用 できるという点 では共通 している。また両者 とも巨大 なバイナリデータを扱 う仕組 みがないことが共通 している。 - YAML
- JSONはYAMLのサブセットと
見 なしてよい[19]。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レベルで要請 している[20]為 、該当 する異常 データのエラーハンドリングに違 いが出 る可能 性 はある。
出典
- ^ JSON is a lightweight, text-based, language-independent syntax for defining data interchange formats. ECMA-404
- ^ “Introducing JSON”. json.org. 2008
年 4月 19日 閲覧 。 - ^ a b ongoing by Tim Bray · The Last JSON Spec
- ^ Subsume JSON a.k.a. JSON ⊂ ECMAScript · V8
- ^ Douglas Crockford: The JSON Saga - YouTube
- ^ A JSON value can be an object, array, number, string, true, false, or null. ECMA-404
- ^ “JSONPath - XPath for JSON”. goessner.net. 8 June 2023
閲覧 。 - ^ “JSONPath Comparison”. cburgmer.github.io. 10 May 2024
閲覧 。 - ^ “JSON Developer's Guide”. Oracle Help Center. 8 June 2023
閲覧 。 - ^ jovanpop-msft. “JSON Path Expressions - SQL Server”. learn.microsoft.com. 8 June 2023
閲覧 。 - ^ “MySQL :: MySQL 8.0 Reference Manual :: 11.5 The JSON Data Type”. dev.mysql.com. 8 June 2023
閲覧 。 - ^ PostgreSQL: Documentation: 15: 9.16. JSON Functions and Operators
- ^ “json-path Output Type — MongoDB Command Line Interface”. mongodb.com. 8 June 2023
閲覧 。 - ^ “Path”. Redis. 8 June 2023
閲覧 。 - ^ “JSON Lines”. jsonlines.org. 4 July 2024
閲覧 。 - ^ “ndjson/ndjson-spec: Specification”. July 4, 2024
閲覧 。 - ^ Update specification_draft2.md · ndjson/ndjson-spec@c658c26
- ^ “JSON5 – JSON for Humans”. JSON5. 31 May 2023
閲覧 。 - ^ “YAML is JSON”. 2009
年 7月 22日 時点 のオリジナルよりアーカイブ。2013年 5月 15日 閲覧 。 - ^ “3.2.1. Representation Graph - YAML Ain’t Markup Language (YAML™) Version 1.2”. yaml.org. 2013
年 5月 15日 閲覧 。
関連 項目
外部 リンク
- Introducing JSON
- IETFの
仕様 書 - ECMA-404
- ISO/IEC 21778:2017