RFC 8259 (JSON data format)
JSON の新版が公開されました。
復習を兼ねて、変更点とおさらいをまとめておきました。
従来からの変更点
- JSON は ECMA-404 と RFC8259 で定義されているが、今後は完全に互換性があるものとして扱われる
- JSON が最新の UNICODE を参照するようになった。つまり UNICODE の仕様変更で JSON も影響を受ける
- string は UTF8 が必須に
JSON とは
- JSON はポータビリティを意識して設計された JavaScript のサブセット
- XML にくらべて手軽に利用できるため、ブラウザ界隈から利用が始まった。現在では広く利用されている
- JSON の object は JavaScript における Object リテラルである、array も同様に Array リテラルである
- string, number, boolean, null といった値や型の扱いも JavaScript のそれに準じる
- literal and types
- string は
"
で始まり"
で終わる。UTF8文字列である- 文字列内に直接記述できない以下の文字(列)はエスケープしなければならない
- control characters (U+0000 - U+001F)
- quotation mark (
"
U+0022) - reverse solidus (
\
U+005C)
- 全ての文字はエスケープ可能である
- エスケープ表現は、
\
で始まり小文字のu
に続く16進数でコードポイントを記述する - 基本面に存在しない文字は、12文字のUTF16サロゲートペアとして記述する
- 文字列内に直接記述できない以下の文字(列)はエスケープしなければならない
- number は IEEE 754 である
- 指数表現も可能であるが、精度は実装に依存し不定である
- 実運用に際しては IEEE 754 binary64 (double precision) numbers 相当の精度を期待してもよい
- 整数表現における整数部がゼロの場合であってもゼロは省略できない
- 整数表現における整数部のプラス記号は記述不能。マイナス記号は記述可能
- 整数表現における整数部の先行するゼロは不正である
- Infinity と NaN は使用できない
- 指数表現も可能であるが、精度は実装に依存し不定である
- boolean は
true
またはfalse
と記述する。全て小文字である - null は
null
と記述する。全て小文字である - object は
{
で始まり}
で終わる。順序を考慮しないname/valueペアのコレクションである- 同じ name が複数回使用された場合の結果は実装依存であり不定である
- array は
[
で始まり]
で終わる。順序を考慮したvalueのコレクションである
- string は
- name and value
- name は object の key に相当する。name は string である
- value は object の value と array の value に相当する。value は string, number, boolean, null, object または array のいずれかである
- object は name と value をペアとして扱う
- separator
- セパレータには記号(
[]{}:,
)を使用する
- セパレータには記号(
- whitespace
- ホワイトスペースは(0x20, 0x09, 0x0A, 0x0D)の何れかである
- name や value の前後に複数のホワイトスペースを含んでいても良い。それらはデコーダが適切に無視する
- セパレターや前後に複数のホワイトスペースを含んでいても良い。それらはデコーダが適切に無視する
- 文字列の前後にもホワイトスペースを含める事ができるが、文字列の意味が変化する場合は例外である
- コメント
- 記述できない
- JSON の mime type は "application/json" である
- JSON の先頭にBOM(U+FEFF)を付与するのは禁止。デコーダはBOMを無視してもよい
フォーマット例
以下はいずれも適切な array である。末尾の余計なカンマ(通称ケツカンマ)は許可されない。
[]
[ 123 ]
[ 123, "456" ]
以下はいずれも適切な object である。ケツカンマは許可されない。
{}
{ "name1": 123 }
{ "name1": 123, "name2": "456" }
以下はいずれも適切な string である。
"abc"
-
"\u0061\u0062\u0063"
# "abc" -
"\u005C"
# ""
より詳しく知りたい方は
事実上最後のJSON仕様「RFC 8259」と「ECMA-404 2nd Editon」公開。UTF-8エンコード必須に を読了後に、
原文 を参照してください。