Sign in Join
Wiki copytemporary

JSON/ja: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: JSON/ja

OldNewLine
1+## 概要
2+
3+[JSON](http://www.json.org) (JavaScript Object Notation) は、簡単なテキストファイルを用いたデータ交換用の保存形式です。 JSONは、名前から分かるように JavaScript のオブジェクト表記法に基づいていますが JavaScript 専用ではありません。 人間による読み書きも簡単にでき、機械(パソコン)にとってもパースや生成が容易な形式です。
4+
5+[[XML|XMLと]]比較しても、より人間にとって読みやすい形式になっています。
6+
7+## JSON オブジェクト
8+
9+JSON オブジェクトは、カンマ(,)で区切られた name/value の一対(メンバと呼びます)を、波括弧(なみかっこ; curly bracket: {})で括った集まりです。:
10+
11+``` javascript
12+{"name1":value1, "name2":value2 ...}
13+```
14+
15+上記は、可読性を高めるために、しばしば縦に name/value を表記するときもあります。:
16+
17+``` javascript
18+{
19+ "name1": value1,
20+ "name2": value2
21+}
22+```
23+
24+name は、2重引用符(ダブルクォート; double quote: "")に囲まれた文字列の形をとります。対して、valueは以下に示す表記が可能です。:
25+
26+- 単純な文字列(2重引用符で囲まれます)、数値、ブーリアン型、またはnull値:\
27+ `{"id":1, "name":"John Doe", "married":false}`
28+
29+- 配列; 角カッコ(大カッコ; square bracket; \[\])に囲まれた、カンマ区切りの値の集まりです。:\
30+ `{"primeNumbers":[2, 3, 5, 7, 11, 13, 17], "oddNumbers":[1,3,5,7]}`
31+
32+- オブジェクト; 波カッコ(中カッコ; curly bracket; {})に囲まれた、name/valueの一対の集まりです。:\
33+ `{"address":{"street":"145 Koinange Street", "City":"Nairobi", "Country":"Kenya"}}`
34+
35+JSON オブジェクトは、さらに複雑なオブジェクトを表現するために、どんどんネストする(入れ子にする)ことができます。:
36+
37+``` javascript
38+{"user":
39+ { "userid": 1900,
40+ "username": "jsmith",
41+ "password": "secret",
42+ "groups": [ "admins", "users", "maintainers"]
43+ }
44+}
45+```
46+
47+## 正しい JSON 形式
48+
49+JSON 形式の定義は、2、3のガイドラインとルールからなります。(RFC 4627 を参照):
50+
51+- JSON オブジェクトは、波カッコ(中カッコ; bracket)`{ }`で囲まれます。空のオブジェクトは`{ }`で表します。
52+- 配列(Array)は、角カッコ(大カッコ;square brackets: `[ ]`)で囲まれます。空の配列は`[ ]`で表します。
53+- メンバはキーとなる値の一対で表します。
54+- メンバのキーは、2重引用符(double quotes; " ")で囲まれます。
55+- それぞれのメンバは、オブジェクトの構造の中で、ユニーク(ただ一つ)となるキーを持つことが推奨され(SHOULD)ます。
56+- メンバの値は、文字列であれば、2重引用符(double quotes; " ")で囲む必要があります。
57+- ブール値は**true** か **false** の小文字の文字列で表します。
58+- 数値は倍精度浮動小数点形式です。科学的表記(1.0e-10などの表記)もサポートします。数値は0(ゼロ)から始まるべきではありません。
59+- 文字列内の制御記号は、バックスラッシュ(backslash; \\)を記号の前に置くことで、文字列として扱えます。
60+- Null値は、**null**の小文字の文字列で表します。
61+- 他のオブジェクトタイプ(日付など)は基本的にサポートしていませんが、 parser/client で扱えるように、文字列に変換して用いるべきです。
62+- オブジェクトや配列の各メンバは、コンマ(,)をそのメンバの後に置きます。最後のメンバであっても、後ろにコンマを付けます。
63+- JSON ファイルの拡張子は、ふつう **.json** が用いられます。
64+- JSON の MIME タイプは、**application/json** です。
65+
66+## 実装
67+
68+JSON の実装は厳密なものではありません。 クライアント側の実装には を許し、一方で パーサーはガイドラインに従うように実装しています。通常のコードを書く場合は、and a lot of leeway is granted to the client application and/or parser to enforce the guidelines. As usual when writing code:
69+
70+- 受け取る値にであるようにしましょう。be liberal in what you accept
71+- 書き出す側では、形式を厳密に守るようにしましょう。
72+
73+JSONには、2つの主流となる実装があります。:
74+
75+### 公式の JSON 形式
76+
77+この実装は、This implementation adheres strictly to the RFC 4627 guidelines above and does not allow deviation from the specification.
78+
79+### Javascript 形式
80+
81+この実装は、follows the implementation of the Javascript programming language and as such allows for a few deviations from the official specification. For example:
82+
83+1. allows un-quoted keys eg `{name: "John Doe" }`
84+2. allows single quotes for keys and/or string values; and a liberal mix of single and double quotes eg `{'name': "John Doe", "language":'Pascal'}`
85+3. allows trailing comma after the last member of an array and/or object eg `{"keywords":["if","begin","for",], "IDEs":["Lazarus","fpIDE","MSEide"],}`
86+
87+## 関連情報
88+
89+- [[fcl-json]] FreePascal と Lazarus に JSON を実装しているパッケージ。下記 Streaming JSON に用いている fpJSONrtti ユニットも含まれます。
90+- [公式の JSON webサイト](http://www.json.org)
91+- [[Streaming JSON/de]] - (JSON をストリームを用いて読み書きする方法についての記事:オリジナルのドイツ語版)
92+- [[Streaming JSON]] - (オリジナルのドイツ語記事の英訳版。記事頭に「この記事はGoogle翻訳による翻訳であり、不正確な英語や間違っているデータがあるため修正が必要です。他の方は機械翻訳を使わないように」、との記述があり、あまり参考にならなかったので、日本語版はきちんと動くように修正してみました。 )
93+- [[Streaming JSON/ja]] - (上記、英訳の記事を参考に、現在(20150525時点)で、WINDOWS8.1、64bit上での実行を確認したソースに差し替え、さらに実用的な例を追加してみました。)
94+- 「JSON」英語版の参照には「Streaming JSON/ru」へのリンクもあったが、内容は英語版と同じようなので削除した。読みたい方は、「JSON」英語版の参照のリンクを見てください。
95+
96+---
97+*From the Free Pascal wiki, page "JSON/ja", as it stood on 2017-05-04 after a change by Miyatakejiro, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history