RFC 4627中国語版-JSON形式定義

9129 ワード

近々JSONのシーケンス化と逆シーケンス化について少し検討したいと思います.JSONフォーマットはよく知られていますが、直感的な認識から来ていることが多いです.厳密な定義は知られていない.学習と練習の心理状態に基づいて、RFC 4627規範を翻訳した.@iwwyが私の間違った翻訳原稿を校正して修正してくれたことに感謝します.華やかな分割線---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
本稿では、インターネット通信に関する内容を提供します.これはいかなる形式のインターネットの標準ではありませんて、あなたは勝手に本文を伝播することができていかなる制限がありません.著作権のヒント
Copyright(C)The Internet Society(2006)要約
JavaScript Object Notation(JSON)は、軽量レベルのテキストベースの言語間データ交換フォーマットです.ECMAScriptプログラミング言語標準(ECMAScript Programming Language Standard)から派生した.JSONは、構造化データを表す移植可能なフォーマット規則のセットを定義する.1.概要
JavaScript Object Notation(JSON)は、構造化されたデータをシーケンス化するためのテキスト形式です.ECMAScript Programming Language Standard,Third Edition[ECMA]で定義されたJavaScriptオブジェクトの字面量に基づいています.
JSONには、4つのベースタイプ(文字列、数値、ブール、null)と2つの構造タイプ(オブジェクトと配列)があります.
文字列は、0または複数のUnicode文字からなるシーケンスです.
オブジェクトは、ゼロまたは複数の名前/値ペアからなる無秩序な集合であり、名前/値ペアの名前は文字列タイプであり、値は文字列、数値、ブール、null、オブジェクトまたは配列タイプであってもよい.
配列は、ゼロまたは複数の値からなる秩序化されたシーケンスです.
「オブジェクト」と「配列」という用語は、JavaScriptの慣習的な呼び方に由来する.
JSONの設計目標は、できるだけ小さく、移植可能で、テキスト化され、JavaScriptのサブセットとして使用できることです.1.1. に約束
本文中の「MUST」、「MUST NOT」、「REQUIRD」、「SHALL」、「SHALL NOT」、「SHOULD」、「SHOULD NOT」、「RECOMMENDED」、「MAY」、および「OPTIONAL」キーワードの意味は[RFC 219]の定義に従う.
本明細書の構文規則は[RFC 4234]の定義に従う.2.JSON文法
1つのJSONテキストは、6つの構造文字、文字列、数字、および3つの字面量を含むタグシーケンスです.
JSONテキストは、オブジェクトまたは配列のシーケンス化結果です.
JSON-text = object / array

以下は6種類の構造文字です.
begin-array     = ws %x5B ws  ; [     
begin-object    = ws %x7B ws  ; {     
end-array       = ws %x5D ws  ; ]     
end-object      = ws %x7D ws  ; }     
name-separator  = ws %x3A ws  ; :   
value-separator = ws %x2C ws  ; ,   

6種類の構造文字の前後に意味のない空白文字を追加できます.
ws = *(
   %x20 / ;   
   %x09 / ; \t      
   %x0A / ; 
%x0D ; \r )
2.1. 値
JSON値MUSTは、オブジェクト、配列、数値、文字列、または次の3つの文字列の1つです.
false null true

字面量MUSTは小文字であり、他のいかなる字面量も許されない.
value = false / null / true / object / array / number / string
false = %0x66.61.6c.73.65 ; false
null  = %0x6e.75.6c.6c ; null
true  = %0x74.72.75.65 ; true
2.2. オブジェクト
オブジェクト構造は、0~複数の名前/値のペア(またはメンバー)を括弧で囲んでいることを示します.名前/値ペアの名前は文字列で、名前と値を区切るためのコロンが続きます.値の後ろには、値と次の名前/値のペアを区切るカンマの名前が表示されます.1つのオブジェクト内の名前SHOULDは唯一です.
object = begin-object [ member *( value-separator member ) ] end-object
member = string name-separator value
2.3. はいれつ
配列構造は、0から複数の値(または要素)を1対の中括弧で囲んでいることを示します.値の間をカンマで区切ります.
array = begin-array [ value *( value-separator value ) ] end-array
2.4. 数値
数字の表現は他のほとんどの言語と似ている.数値には、任意のマイナス記号を接頭辞とする整数部分が含まれ、その後ろに小数部および/または指数部が続くことができます.
8進法または16進法の形式は許されない.0で始まるのも許されません.
小数部は、小数点の後に1つ以上の数字に従うものです.
指数部分は大文字と小文字を問わないアルファベットEで始まり、その後はプラスまたはマイナス記号を付けることができます.Eとオプションの記号の後に、1つまたは複数の数字を付けることができます.
数値として表すことができないシーケンス(例えば、無限大およびNaN)の数値値は許されない.
number        = [ minus ] int [ frac ] [ exp ]
decimal-point = %x2E                             ; .
digit1-9      = %x31-39                          ; 1-9
e             = %x65 / %x45                      ; e E
exp           = e [ minus / plus ] 1*DIGIT
frac          = decimal-point 1*DIGIT
int           = zero / ( digit1-9 *DIGIT )
minus         = %x2D                             ; -
plus          = %x2B                             ; +
zero          = %x30                             ; 0
2.5. 文字列
文字列の表現はC言語ファミリーの扱い方と似ている.文字列は、先頭と末尾に引用符で囲まれています.エスケープする必要がある文字以外のすべてのUnicode文字は、引用符(')、スラッシュ()、および制御文字(U+0000からU+001 F)の文字列に直接配置できます.
任意の文字をエスケープできます.基本多言語平面(Basic Multilingual Plane(U+0000からU+FFFF))内であれば、6文字のシーケンスとして表すべきです.反スラッシュの後ろに小文字uが付いていて、4桁の文字の位置を表す16進数が付いています.16進数のアルファベットA-Fは、大文字でも小文字でもよい.たとえば、1つの反スラッシュのみからなる文字列は、「<5 C」と表すことができます.
また、いくつかのポピュラーな文字は、2文字のシーケンスで変換できます.たとえば、1つの反スラッシュのみからなる文字列を「\」と表すことができます.
基本マルチ言語プレーン(Basic Multilingual Plane)内にない文字をエスケープするには、UTF-16エンコーディングエージェントペア(encoding the UTF-16 surrogate pair)として表される12文字のシーケンスを使用します.例えば、Gスペクトル文字(U+1 D 11 E)のみを含む文字列を「uD 834uDD 1 E」と表すことができる
string        = quotation-mark *char quotation-mark
char          = unescaped / escape (
    0x22 /                                             ; "    U+0022 
    0x5C /                                             ; \     U+005c
    0x2F /                                             ; /    U+002F
    0x62 /                                             ; b     U+0062
    0x66 /                                             ; f     U+0066
    0x6E /                                             ; n     U+006E
    0x72 /                                             ; r     U+0072
    0x74 /                                             ; t       U+0074
    0x75 4HEXDIG                                       ; uXXXX U+XXXX 
)
escape         = %x5C                                  ; \
quotation-mark = %x22                                  ; "
unescaped      = %x20-21 / %x23-5B / %x5D-10FFFF
3. エンコーディング
JSONテキストSHALLはunicodeコードを使用します.デフォルトのエンコード方式はUTF-8です.
JSONテキストの最初の2文字は必ずASCII文字[RFC 020]であるため、バイトストリームがUTF-8であるか、UTF-16(BEまたはLE)であるか、UTF-32(BEまたはLE)であるかは、第1のグループの4つの8ビットバイトを観察することによって判断することができる.
00 00 00 xx UTF-32BE
00 xx 00 xx UTF-16BE
xx 00 00 00 UTF-32LE
xx 00 xx 00 UTF-16BE
xx xx xx xx UTF-8
4. ぶんせきき
JSON解析器は、JSONテキストを他の表示方法に変換することができます.JSONインタプリタMUSTは、JSON構文に合致するすべてのテキストを受け入れることができます.JSON解析器MAYはJSON形式以外のテキストを受け入れることができます.5.ジェネレータ
JSONジェネレータはJSONテキストを生成できます.その生成結果MUSTはJSONの文法に厳密に適合している.6.IANA(インターネットデジタル配信機構)側の配慮
JSONテキストのMIMEメディアタイプはアプリケーション/jsonです.
タイプ名:アプリケーション
サブタイプ名:json
必須パラメータ:n/a
オプションパラメータ:n/a
符号化上の考慮:UTF-8であれば8ビットバイト、UTF-16とUTF-32であればバイナリ
JSONはUTF-8,UTF-16,UTF-32符号化で表すことができる.UTF-8を使用する場合、JSONは8ビットバイト互換です.UTF-16またはUTF-32の場合は、バイナリコンテンツ転送符号化を使用する必要があります.
セキュリティ上の考慮事項:
通常、スクリプト言語にはセキュリティの問題があり、JSONはJavaScriptのサブセットとして機能しますが、割り当てと呼び出しが排除されているため、セキュリティです.
JSONテキストの文字列部分を除いた文字がすべてJSONタグ(token)文字である場合、JavaScriptのeval()メソッド(文字列をコンパイルおよび実行するためのメソッド)に安全に渡すことができます.JavaScriptでは、2つの正規表現をそれぞれ呼び出すtestメソッドとreplaceメソッドで、この条件が満たされているかどうかを迅速に決定できます.
var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u 
\r\t]/.test(text.replace(/"(\\.|[^"\\])*"/g, ''))) && eval('(' + text + ')');

相互運用性の面での考慮:n/a
リリース仕様:RFC 4627
このメディアタイプのアプリケーションを使用します.
JSONは、ActionScript,C,C#,ColdFusion,Common Lisp,E,Erlang,Java,JavaScript,Lua,Objective CAML,Perl,PHP,Python,Rebol,Ruby,and Schemeのすべてのプログラミング言語で作成されたアプリケーション間でデータを転送するために使用されたことがある.
追加情報:
マジック数字:n/aファイル拡張子:.json Macintoshファイルタイプのコード:TEXT
詳細については、次の連絡先を参照してください.
Douglas Crockford [email protected]
予想される使用法:COMMON
制限された使用法:なし
作成者:
Douglas Crockford [email protected]
変更管理者:
Douglas Crockford [email protected].安全上の配慮
第6節の「安全上の考慮」を参照.8.例を挙げる
これはJSONオブジェクトです.
{
	"Image": {
		"Width": 800,
		"Height": 600,
		"Title": "View from 15th Floor",
		"Thumbnail": {
		"Url": "http://www.example.com/image/481989943",
		"Height": 125,
		"Width": "100"
	},
	"IDs": [116, 943, 234, 38793]
	}
}

2つのオブジェクトを含む配列です.
[{
	"precision": "zip",
	"Latitude": 37.7668,
	"Longitude": -122.3959,
	"Address": "",
	"City": "SAN FRANCISCO",
	"State": "CA",
	"Zip": "94107",
	"Country": "US"

}
,{
	"precision": "zip",
	"Latitude": 37.371991,
	"Longitude": -122.026020,
	"Address": "",
	"City": "SUNNYVALE",
	"State": "CA",
	"Zip": "94085",
	"Country": "US"

}]
9. 参考文献9.1.参照仕様
[ECMA] European Computer Manufacturers Association, "ECMAScript Language Specification 3rd Edition", December 1999, .
[RFC0020] Cerf, V., "ASCII format for network interchange", RFC 20, October 1969.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.
[RFC4234] Crocker, D. and P. Overell, "Augmented BNF for Syntax Specifications: ABNF", RFC 4234, October 2005. 作者の住所
Douglas Crockford JSON.org EMail: [email protected]