JSON

広告

広告

原文

最終更新
2006-09-20T23:11:00+09:00
この記事のURI参照
http://www.7key.jp/rfc/rfc4627.html#source

JSON(和訳)

最終更新
2006-09-20T22:28:00+09:00
この記事のURI参照
http://www.7key.jp/rfc/rfc4627.html#translation

Status of this Memo

   This memo provides information for the Internet community.  It does
   not specify an Internet standard of any kind.  Distribution of this
   memo is unlimited.

当メモはインターネットコミュニティに役立つであろう情報を提供するものであり、これによって標準的なインターネット像をでっちあげようとするものではない。また、当メモは配布に関しての制限を設けていない。

   Copyright (C) The Internet Society (2006).

Abstract

   JavaScript Object Notation (JSON) is a lightweight, text-based,
   language-independent data interchange format.  It was derived from
   the ECMAScript Programming Language Standard.  JSON defines a small
   set of formatting rules for the portable representation of structured
   data.

JSONは、軽く、テキスト形式で、独立した言語のデータ交換用フォーマットであり、ECMAに拠るものである。JSONは、構造化されたデータを交換するための表現を規定する軽量なフォーマットである。

1. Introduction

   JavaScript Object Notation (JSON) is a text format for the
   serialization of structured data.  It is derived from the object
   literals of JavaScript, as defined in the ECMAScript Programming
   Language Standard, Third Edition [ECMA].

JSONは階層データ交換用のテキスト形式であり、オブジェクトリテラルはStandard ECMA-262で定義されるJavaScriptに拠る。

   JSON can represent four primitive types (strings, numbers, booleans,
   and null) and two structured types (objects and arrays).

JSONは四つのプリミティブ型(文字列型、数値型、Yes/No型、Null型)と二つの構造化型(オブジェクトと配列)を表すことができる。

   A string is a sequence of zero or more Unicode characters [UNICODE].

一文字は0以上のユニコード文字値である。

   An object is an unordered collection of zero or more name/value
   pairs, where a name is a string and a value is a string, number,
   boolean, null, object, or array.

オブジェクトは、文字列からなる名前と、四つのプリミティブ型と二つの構造化型全てをとれる値のペアからなる0個以上の順不同なコレクションである。

   An array is an ordered sequence of zero or more values.

配列は、0以上の値をもつ順不同の要素列からなる。

   The terms "object" and "array" come from the conventions of
   JavaScript.

オブジェクトと配列という用語はJavaScriptの決りに則る。

   JSON's design goals were for it to be minimal, portable, textual, and
   a subset of JavaScript.

JSONは、それが最小限であり、且つ移植性があり、且つテキスト形式であり、且つJavaScriptの部分集合であるよう設計されている。

1.1. Conventions Used in This Document

   The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
   "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
   document are to be interpreted as described in [RFC2119].

当文書内で登場するMUSTMUST NOTREQUIREDSHALLSHALL NOTSHOULDSHOULD NOTRECOMMENDEDMAYOPTIONALの意味は[RFC2119]の通りである。

   The grammatical rules in this document are to be interpreted as
   described in [RFC4234].

当文書の文法規定は[RFC4234]の通りである。

2. JSON Grammar

   A JSON text is a sequence of tokens.  The set of tokens includes six
   structural characters, strings, numbers, and three literal names.

JSON文字列は連続したトークンからなり、トークンは六つの構造化型文字列、文字列、数値、三つのリテラル名を含む一揃いの組である。

   A JSON text is a serialized object or array.

      JSON-text = object / array

JSON文字列は連続したオブジェクトまたは配列である。

   These are the six structural characters:

      begin-array     = ws %x5B ws  ; [ left square bracket

      begin-object    = ws %x7B ws  ; { left curly bracket

      end-array       = ws %x5D ws  ; ] right square bracket

      end-object      = ws %x7D ws  ; } right curly bracket

      name-separator  = ws %x3A ws  ; : colon

      value-separator = ws %x2C ws  ; , comma

六つの構造化型文字列は以下の通り。

   Insignificant whitespace is allowed before or after any of the six
   structural characters.

      ws = *(
                %x20 /              ; Space
                %x09 /              ; Horizontal tab
                %x0A /              ; Line feed or New line
                %x0D                ; Carriage return
            )

以下の文字が前述の六つの構造化型文字列の前後にあっても何ら差し支えない。

2.1. Values

   A JSON value MUST be an object, array, number, or string, or one of
   the following three literal names:

      false null true

JSONの値は次のいずれかでなければならない(MUST)。オブジェクト、配列、数値、文字列、またはfalsenulltrueのいずれかの定義済み文字列。

   The literal names MUST be lowercase.  No other literal names are
   allowed.

         value = false / null / true / object / array / number / string

         false = %x66.61.6c.73.65   ; false

         null  = %x6e.75.6c.6c      ; null

         true  = %x74.72.75.65      ; true

定義済み文字列は小文字でなければならず(MUST)、falsenulltrue以外の定義済み文字列は利用できない。

2.2. Objects

   An object structure is represented as a pair of curly brackets
   surrounding zero or more name/value pairs (or members).  A name is a
   string.  A single colon comes after each name, separating the name
   from the value.  A single comma separates a value from a following
   name.  The names within an object SHOULD be unique.

      object = begin-object [ member *( value-separator member ) ]
      end-object

      member = string name-separator value

オブジェクトの構造は、0個以上の名前と値のペアまたはメンバを中括弧で括ることで表される。名前は文字列で、その後にシングルコロンを記述することによって対になる値と名前が区切られる。また、シングルカンマを記述することによって次の要素の名前と値が区切られることとなる。オブジェクト内の名前は一意であるべきだ(SHOULD)。

2.3. Arrays

   An array structure is represented as square brackets surrounding zero
   or more values (or elements).  Elements are separated by commas.

      array = begin-array [ value *( value-separator value ) ] end-array

配列の構造は、0以上の値か要素を各括弧で括ることで表される。各要素はカンマで区切る。

2.4. Numbers

   The representation of numbers is similar to that used in most
   programming languages.  A number contains an integer component that
   may be prefixed with an optional minus sign, which may be followed by
   a fraction part and/or an exponent part.

数値型は、殆どのプログラミング言語で使われている数値型と同様に表される。数値にはマイナス記号が付けられるかもしれないし、小数部分が整数の後に続くかもしれないし、指数部分が整数の後に続くかもしれない。

   Octal and hex forms are not allowed.  Leading zeros are not allowed.

8進数表記と16進数表記は許されておらず、また0から始まる数値も許されていない。

   A fraction part is a decimal point followed by one or more digits.

小数部分は、小数点の後に1つ以上の数値が続く。

   An exponent part begins with the letter E in upper or lowercase,
   which may be followed by a plus or minus sign.  The E and optional
   sign are followed by one or more digits.

指数部は、文字"E"――大文字又は小文字――の後に続く。その"E"の後にはプラス記号かマイナス記号が続く場合もある。つまり、桁を表す数値が"E"の後に続くこととなり、その桁はマイナス値も取り得る。

   Numeric values that cannot be represented as sequences of digits
   (such as Infinity and NaN) are not permitted.

         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

InfinityやNaNなど数字として表されない値を数値とすることはできない。

2.5. Strings

   The representation of strings is similar to conventions used in the C
   family of programming languages.  A string begins and ends with
   quotation marks.  All Unicode characters may be placed within the
   quotation marks except for the characters that must be escaped:
   quotation mark, reverse solidus, and the control characters (U+0000
   through U+001F).

文字列型の表現は、プログラミング言語であるCファミリで用いられる規約と同様である。文字列の最初と最後にダブルクオーテーションマークを記述し、つまり全てのユニコード文字をダブルクオーテーションで括ることとなる。ダブルクオーテーションやバックスラッシュ、その他の制御文字――U+0000〜U+001F――といった特殊な文字を文字列とする場合はエスケープ文字を用いなければならない。

   Any character may be escaped.  If the character is in the Basic
   Multilingual Plane (U+0000 through U+FFFF), then it may be
   represented as a six-character sequence: a reverse solidus, followed
   by the lowercase letter u, followed by four hexadecimal digits that
   encode the character's code point.  The hexadecimal letters A though
   F can be upper or lowercase.  So, for example, a string containing
   only a single reverse solidus character may be represented as
   "\u005C".

どんな文字でもエスケープすることは可能であるが、その文字がBMP――U+0000〜U+FFFF――であれば、バックスラッシュの後に小文字の"u"、更にその後に対象の文字の文字コードをエンコードした四文字の16進数を使って表すことができる。16進数で使われる"A"から"F"の文字は大文字でも小文字でもよい。従って、例えばただのバックスラッシュからなる文字列を表したければ、"\u005C"とすればよい。

   Alternatively, there are two-character sequence escape
   representations of some popular characters.  So, for example, a
   string containing only a single reverse solidus character may be
   represented more compactly as "\\".

更にもう一つエスケープシーケンスを表す一般的な方法がある。例えば前述と同じくただのバックスラッシュからなる文字列を表したい場合、単純に"\\"とすればよい。

   To escape an extended character that is not in the Basic Multilingual
   Plane, the character is represented as a twelve-character sequence,
   encoding the UTF-16 surrogate pair.  So, for example, a string
   containing only the G clef character (U+1D11E) may be represented as
   "\uD834\uDD1E".

         string = quotation-mark *char quotation-mark

         char = unescaped /
                escape (
                    %x22 /          ; "    quotation mark  U+0022
                    %x5C /          ; \    reverse solidus U+005C
                    %x2F /          ; /    solidus         U+002F
                    %x62 /          ; b    backspace       U+0008
                    %x66 /          ; f    form feed       U+000C
                    %x6E /          ; n    line feed       U+000A
                    %x72 /          ; r    carriage return U+000D
                    %x74 /          ; t    tab             U+0009
                    %x75 4HEXDIG )  ; uXXXX                U+XXXX

         escape = %x5C              ; \

         quotation-mark = %x22      ; "

         unescaped = %x20-21 / %x23-5B / %x5D-10FFFF

BMPに含まれない拡張文字をエスケープするために、UTF-16(surrogate pair)でエンコードした12文字のシーケンスとして表すことができる。例えばト音記号(U+1D11E)のみを含む文字列は\uD834\uDD1Eとすればよい。

3. Encoding

   JSON text SHALL be encoded in Unicode.  The default encoding is
   UTF-8.

JSONで使われる文字はUnicodeでエンコードすべきであり(SHALL)、デフォルトエンコードはUTF-8である。

   Since the first two characters of a JSON text will always be ASCII
   characters [RFC0020], it is possible to determine whether an octet
   stream is UTF-8, UTF-16 (BE or LE), or UTF-32 (BE or LE) by looking
   at the pattern of nulls in the first four octets.

           00 00 00 xx  UTF-32BE
           00 xx 00 xx  UTF-16BE
           xx 00 00 00  UTF-32LE
           xx 00 xx 00  UTF-16LE
           xx xx xx xx  UTF-8

JSON内の最初の二文字は常に[RFC0020]で示されるASCII文字となるので、最初の4オクテットのnullの規則を調べることでUTF-8なのかUTF-16(BE、LE)、UTF-32(BE、LE)なのかを判断することができる。

4. Parsers

   A JSON parser transforms a JSON text into another representation.  A
   JSON parser MUST accept all texts that conform to the JSON grammar.
   A JSON parser MAY accept non-JSON forms or extensions.

JSONパーサはJSON文字を別の表現に変換をする。JSONパーサはJSONの文法に則ったコードを全て解釈できなければならない(MUST)。逆にJSONパーサがJSON文法に則らないコードや拡張コードを解釈することは特に問題ではない(MAY)。

   An implementation may set limits on the size of texts that it
   accepts.  An implementation may set limits on the maximum depth of
   nesting.  An implementation may set limits on the range of numbers.
   An implementation may set limits on the length and character contents
   of strings.

JSONパーサの実装では、解釈可能なテキストサイズに制限があるかもしれない。よってネストの深さや数値の桁、文字列の長さには上限を設定した方が良いだろう。

5. Generators

   A JSON generator produces JSON text.  The resulting text MUST
   strictly conform to the JSON grammar.

JSONジェネレータはJSON文字を生成するアプリケーションプログラムであり、生成される文字はJSON文法に厳密に則ったものでなければならない(MUST)。

6. IANA Considerations

   The MIME media type for JSON text is application/json.

JSONのMIMEタイプはapplication/jsonである。

   Type name: application
   Subtype name: json
   Required parameters: n/a
   Optional parameters: n/a
   Encoding considerations: 8bit if UTF-8; binary if UTF-16 or UTF-32

      JSON may be represented using UTF-8, UTF-16, or UTF-32.  When JSON
      is written in UTF-8, JSON is 8bit compatible.  When JSON is
      written in UTF-16 or UTF-32, the binary content-transfer-encoding
      must be used.

JSONはUTF-8、UTF-16、UTF-32のいずれかで表される。UTF-8でエンコードされている場合は8bit互換であり、UTF-16かUTF-32でエンコードされている場合はバイナリエンコードが使われている。

   Security considerations:

   Generally there are security issues with scripting languages.  JSON
   is a subset of JavaScript, but it is a safe subset that excludes
   assignment and invocation.

一般的にスクリプト言語にはセキュリティ上の問題が生じ易い。ただし、JSONはJavaScriptのサブセットとの位置付けだが、JavaScriptから代入と呼び出しが取り除かれた安全なサブセットである。

   A JSON text can be safely passed into JavaScript's eval() function
   (which compiles and executes a string) if all the characters not
   enclosed in strings are in the set of characters that form JSON
   tokens.  This can be quickly determined in JavaScript with two
   regular expressions and calls to the test and replace methods.

      var my_JSON_object = !(/[^,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]/.test(
             text.replace(/"(\\.|[^"\\])*"/g, ''))) &&
         eval('(' + text + ')');

全ての文字列がJSONトークン形式に則ったものでなかったとしても、JSONはJavaScriptのeval()関数――当関数は文字列をコンパイルして実行する――を使うことによって安全な物となる。このことにより、より快適に二つの正規表現とtestreplaceの呼び出しを行うことができる。

   Interoperability considerations: n/a

   Published specification: RFC 4627

   Applications that use this media type:

      JSON has been used to exchange data between applications written
      in all of these programming languages: ActionScript, C, C#,
      ColdFusion, Common Lisp, E, Erlang, Java, JavaScript, Lua,
      Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Scheme.

JSONは次のプログラミング言語で書かれたアプリケーションとの間でデータのやり取りが可能である。

   Additional information:

      Magic number(s): n/a
      File extension(s): .json
      Macintosh file type code(s): TEXT
   Person & email address to contact for further information:
      Douglas Crockford
      douglas@crockford.com

   Intended usage: COMMON

   Restrictions on usage: none

   Author:
      Douglas Crockford
      douglas@crockford.com

   Change controller:
      Douglas Crockford
      douglas@crockford.com

7. Security Considerations

   See Security Considerations in Section 6.

セキュリティへの配慮はセクション6を参照のこと。

8. Examples

   This is a JSON object:

   {
      "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]

        }
   }
   Its Image member is an object whose Thumbnail member is an object
   and whose IDs member is an array of numbers.
   This is a JSON array containing two objects:
   [
      {
         "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. References

9.1. Normative References

   [ECMA]    European Computer Manufacturers Association, "ECMAScript
             Language Specification 3rd Edition", December 1999,
             <http://www.ecma-international.org/publications/files/
             ecma-st/ECMA-262.pdf>.

   [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.

   [UNICODE] The Unicode Consortium, "The Unicode Standard Version 4.0",
             2003, <http://www.unicode.org/versions/Unicode4.1.0/>.

Author's Addresses

Author's Address

   Douglas Crockford
   JSON.org
   EMail: douglas@crockford.com
   Copyright (C) The Internet Society (2006).
   This document is subject to the rights, licenses and restrictions
   contained in BCP 78, and except as set forth therein, the authors
   retain all their rights.

当文書はBCP78で触れられている権利と許可と制限の適用を受け、文書中で明らかにされている個所を除いて著者が全ての権利を維持する。

   This document and the information contained herein are provided on an
   "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS
   OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY AND THE INTERNET
   ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS OR IMPLIED,
   INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF THE
   INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED
   WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.

当文書及び文書内の情報は無保証で提供され、寄稿者、寄稿者が代表となる組織、もしあれば寄稿者を後援する組織、インターネット学会及びIETFは、当文書がいかなる権利も侵害していないという保証、商業利用や特定目的に対する適合性への保証、更にはこれらに限らずあらゆる保証について明示的にも暗黙的にも保証をしていない。

Intellectual Property

   The IETF takes no position regarding the validity or scope of any
   Intellectual Property Rights or other rights that might be claimed to
   pertain to the implementation or use of the technology described in
   this document or the extent to which any license under such rights
   might or might not be available; nor does it represent that it has
   made any independent effort to identify any such rights.  Information
   on the procedures with respect to rights in RFC documents can be
   found in BCP 78 and BCP 79.

IETFは当文書で提供する技術の実装や他の技術の使用に対して主張される知的所有権、その他の権利や効力または適用範囲、更にそれらの権利に基づく全てのライセンスが利用可能であるか否かについては一切関与をしない。これらに関して全ての権利が明確となるよう調査が行われているわけではない。文書の権利に関るIETFの手続きについてはBCP78とBCP79で閲覧可能である。

   Copies of IPR disclosures made to the IETF Secretariat and any
   assurances of licenses to be made available, or the result of an
   attempt made to obtain a general license or permission for the use of
   such proprietary rights by implementers or users of this
   specification can be obtained from the IETF on-line IPR repository at
   http://www.ietf.org/ipr.

IETFによるIPR開示情報のコピーや利用可能なライセンスの保証、本仕様の実装者やユーザがそれらの一般ライセンスや使用許諾を得るための手順は、IETFのオンラインIPRレポジトリから入手可能である。

   The IETF invites any interested party to bring to its attention any
   copyrights, patents or patent applications, or other proprietary
   rights that may cover technology that may be required to implement
   this standard.  Please address the information to the IETF at
   ietf-ipr@ietf.org.

IETFは本標準を実装するために必要な技術に関する著作権、特許、特許出願、その他の知的所有権への指摘を歓迎する。その折は、ietf-ipr@ietf.org まで情報をお寄せ頂きたい。

Acknowledgement

   Funding for the RFC Editor function is provided by the IETF
   Administrative Support Activity (IASA).

RFC編集者の職務に対する資金供給は、現在インターネット学会から提供されている。

広告

Copyright (C) 2006 七鍵 key@do.ai 初版:2006年09月19日 最終更新:2006年09月20日