JSON/ja
│
English (en) │
suomi (fi) │
日本語 (ja) │
한국어 (ko) │
polski (pl) │
русский (ru) │
中文(中国大陆) (zh_CN) │
概要
JSON (JavaScript Object Notation) は、簡単なテキストファイルを用いたデータ交換用の保存形式です。 JSONは、名前から分かるように JavaScript のオブジェクト表記法に基づいていますが JavaScript 専用ではありません。 人間による読み書きも簡単にでき、機械(パソコン)にとってもパースや生成が容易な形式です。
XMLと比較しても、より人間にとって読みやすい形式になっています。
JSON オブジェクト
JSON オブジェクトは、カンマ(,)で区切られた name/value の一対(メンバと呼びます)を、波括弧(なみかっこ; curly bracket: {})で括った集まりです。:
{"name1":value1, "name2":value2 ...}
上記は、可読性を高めるために、しばしば縦に name/value を表記するときもあります。:
{
"name1": value1,
"name2": value2
}
name は、2重引用符(ダブルクォート; double quote: "")に囲まれた文字列の形をとります。対して、valueは以下に示す表記が可能です。:
- 単純な文字列(2重引用符で囲まれます)、数値、ブーリアン型、またはnull値:
{"id":1, "name":"John Doe", "married":false}
- 配列; 角カッコ(大カッコ; square bracket; [])に囲まれた、カンマ区切りの値の集まりです。:
{"primeNumbers":[2, 3, 5, 7, 11, 13, 17], "oddNumbers":[1,3,5,7]}
- オブジェクト; 波カッコ(中カッコ; curly bracket; {})に囲まれた、name/valueの一対の集まりです。:
{"address":{"street":"145 Koinange Street", "City":"Nairobi", "Country":"Kenya"}}
JSON オブジェクトは、さらに複雑なオブジェクトを表現するために、どんどんネストする(入れ子にする)ことができます。:
{"user":
{ "userid": 1900,
"username": "jsmith",
"password": "secret",
"groups": [ "admins", "users", "maintainers"]
}
}
正しい JSON 形式
JSON 形式の定義は、2、3のガイドラインとルールからなります。(RFC 4627 を参照):
- JSON オブジェクトは、波カッコ(中カッコ; bracket)
{ }
で囲まれます。空のオブジェクトは{ }
で表します。 - 配列(Array)は、角カッコ(大カッコ;square brackets:
[ ]
)で囲まれます。空の配列は[ ]
で表します。 - メンバはキーとなる値の一対で表します。
- メンバのキーは、2重引用符(double quotes; " ")で囲まれます。
- それぞれのメンバは、オブジェクトの構造の中で、ユニーク(ただ一つ)となるキーを持つことが推奨され(SHOULD)ます。
- メンバの値は、文字列であれば、2重引用符(double quotes; " ")で囲む必要があります。
- ブール値はtrue か false の小文字の文字列で表します。
- 数値は倍精度浮動小数点形式です。科学的表記(1.0e-10などの表記)もサポートします。数値は0(ゼロ)から始まるべきではありません。
- 文字列内の制御記号は、バックスラッシュ(backslash; \)を記号の前に置くことで、文字列として扱えます。
- Null値は、nullの小文字の文字列で表します。
- 他のオブジェクトタイプ(日付など)は基本的にサポートしていませんが、 parser/client で扱えるように、文字列に変換して用いるべきです。
- オブジェクトや配列の各メンバは、コンマ(,)をそのメンバの後に置きます。最後のメンバであっても、後ろにコンマを付けます。
- JSON ファイルの拡張子は、ふつう .json が用いられます。
- JSON の MIME タイプは、application/json です。
実装
JSON の実装は厳密なものではありません。 クライアント側の実装には を許し、一方で パーサーはガイドラインに従うように実装しています。通常のコードを書く場合は、and a lot of leeway is granted to the client application and/or parser to enforce the guidelines. As usual when writing code:
- 受け取る値にであるようにしましょう。be liberal in what you accept
- 書き出す側では、形式を厳密に守るようにしましょう。
JSONには、2つの主流となる実装があります。:
公式の JSON 形式
この実装は、This implementation adheres strictly to the RFC 4627 guidelines above and does not allow deviation from the specification.
Javascript 形式
この実装は、follows the implementation of the Javascript programming language and as such allows for a few deviations from the official specification. For example:
- allows un-quoted keys eg
{name: "John Doe" }
- allows single quotes for keys and/or string values; and a liberal mix of single and double quotes eg
{'name': "John Doe", "language":'Pascal'}
- allows trailing comma after the last member of an array and/or object eg
{"keywords":["if","begin","for",], "IDEs":["Lazarus","fpIDE","MSEide"],}
関連情報
- fcl-json FreePascal と Lazarus に JSON を実装しているパッケージ。下記 Streaming JSON に用いている fpJSONrtti ユニットも含まれます。
- 公式の JSON webサイト
- Streaming JSON/de - (JSON をストリームを用いて読み書きする方法についての記事:オリジナルのドイツ語版)
- Streaming JSON - (オリジナルのドイツ語記事の英訳版。記事頭に「この記事はGoogle翻訳による翻訳であり、不正確な英語や間違っているデータがあるため修正が必要です。他の方は機械翻訳を使わないように」、との記述があり、あまり参考にならなかったので、日本語版はきちんと動くように修正してみました。 )
- Streaming JSON/ja - (上記、英訳の記事を参考に、現在(20150525時点)で、WINDOWS8.1、64bit上での実行を確認したソースに差し替え、さらに実用的な例を追加してみました。)
- 「JSON」英語版の参照には「Streaming JSON/ru」へのリンクもあったが、内容は英語版と同じようなので削除した。読みたい方は、「JSON」英語版の参照のリンクを見てください。