JSON/ja: what changed
Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.
Title: JSON/ja
| Old | New | Line | |
|---|---|---|---|
| 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).* |
