| < draft-ietf-json-rfc4627bis-02.txt | draft-ietf-json-rfc4627bis-03.txt > | |||
|---|---|---|---|---|
| Operations Area Working Group D. Crockford | JSON Working Group T. Bray, Ed. | |||
| Internet-Draft JSON.org | Internet-Draft Google, Inc. | |||
| Intended status: Standards Track June 05, 2013 | Intended status: Standards Track September 18, 2013 | |||
| Expires: December 07, 2013 | Expires: March 22, 2014 | |||
| The application/json Media Type for JavaScript Object Notation (JSON) | The JSON Data Interchange Format | |||
| draft-ietf-json-rfc4627bis-02 | draft-ietf-json-rfc4627bis-03 | |||
| Abstract | Abstract | |||
| JavaScript Object Notation (JSON) is a lightweight, text-based, | JavaScript Object Notation (JSON) is a lightweight, text-based, | |||
| language-independent data interchange format. It was derived from | language-independent data interchange format. It was derived from | |||
| the ECMAScript Programming Language Standard. JSON defines a small | the ECMAScript Programming Language Standard. JSON defines a small | |||
| set of formatting rules for the portable representation of structured | set of formatting rules for the portable representation of structured | |||
| data. | data. | |||
| Status of This Memo | Status of This Memo | |||
| skipping to change at page 1, line 34 ¶ | skipping to change at page 1, line 34 ¶ | |||
| Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
| Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
| working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
| Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
| Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
| and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
| time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
| material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
| This Internet-Draft will expire on December 07, 2013. | This Internet-Draft will expire on March 22, 2014. | |||
| Copyright Notice | Copyright Notice | |||
| Copyright (c) 2013 IETF Trust and the persons identified as the | Copyright (c) 2013 IETF Trust and the persons identified as the | |||
| document authors. All rights reserved. | document authors. All rights reserved. | |||
| This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
| Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
| (http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
| publication of this document. Please review these documents | publication of this document. Please review these documents | |||
| carefully, as they describe your rights and restrictions with respect | carefully, as they describe your rights and restrictions with respect | |||
| to this document. Code Components extracted from this document must | to this document. Code Components extracted from this document must | |||
| include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
| the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
| described in the Simplified BSD License. | described in the Simplified BSD License. | |||
| Table of Contents | Table of Contents | |||
| 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2 | |||
| 1.1. Conventions Used in This Document . . . . . . . . . . . . 2 | 1.1. Conventions Used in This Document . . . . . . . . . . . . 3 | |||
| 1.2. Changes from RFC 4627 . . . . . . . . . . . . . . . . . . 3 | 1.2. Introduction to This Revision . . . . . . . . . . . . . . 3 | |||
| 2. JSON Grammar . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.3. Changes from RFC 4627 . . . . . . . . . . . . . . . . . . 3 | |||
| 2.1. Values . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. JSON Grammar . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2.2. Objects . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.3. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 4. Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 2.4. Numbers . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 5. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 2.5. Strings . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 6. Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 3. Encoding . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 7. Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 4. Parsers . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 8. Character Model . . . . . . . . . . . . . . . . . . . . . . . 8 | |||
| 5. Generators . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 8.1. Encoding and Detection . . . . . . . . . . . . . . . . . 8 | |||
| 6. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 7 | 8.2. Unicode Characters . . . . . . . . . . . . . . . . . . . 8 | |||
| 7. Security Considerations . . . . . . . . . . . . . . . . . . . 8 | 8.3. String Comparison . . . . . . . . . . . . . . . . . . . . 9 | |||
| 8. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 9. Parsers . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 9. Normative References . . . . . . . . . . . . . . . . . . . . 10 | 10. Generators . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 11 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 12. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | ||||
| 13. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | ||||
| 14. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 12 | ||||
| 15. Normative References . . . . . . . . . . . . . . . . . . . . 12 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 13 | ||||
| 1. Introduction | 1. Introduction | |||
| JavaScript Object Notation (JSON) is a text format for the | JavaScript Object Notation (JSON) is a text format for the | |||
| serialization of structured data. It is derived from the object | serialization of structured data. It is derived from the object | |||
| literals of JavaScript, as defined in the ECMAScript Programming | literals of JavaScript, as defined in the ECMAScript Programming | |||
| Language Standard, Third Edition [ECMA]. | Language Standard, Third Edition [ECMA]. | |||
| JSON can represent four primitive types (strings, numbers, booleans, | JSON can represent four primitive types (strings, numbers, booleans, | |||
| and null) and two structured types (objects and arrays). | and null) and two structured types (objects and arrays). | |||
| skipping to change at page 3, line 4 ¶ | skipping to change at page 3, line 9 ¶ | |||
| An array is an ordered sequence of zero or more values. | An array is an ordered sequence of zero or more values. | |||
| The terms "object" and "array" come from the conventions of | 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 | JSON's design goals were for it to be minimal, portable, textual, and | |||
| a subset of JavaScript. | a subset of JavaScript. | |||
| 1.1. Conventions Used in This Document | 1.1. Conventions Used in This Document | |||
| The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", | |||
| "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this | |||
| document are to be interpreted as described in [RFC2119]. | document are to be interpreted as described in [RFC2119]. | |||
| The grammatical rules in this document are to be interpreted as | The grammatical rules in this document are to be interpreted as | |||
| described in [RFC4234]. | described in [RFC4234]. | |||
| 1.2. Changes from RFC 4627 | 1.2. Introduction to This Revision | |||
| In the years since the publication of RFC 4627, JSON has found very | ||||
| wide use. This experience has revealed certain patterns which, while | ||||
| allowed by the RFC, have caused interoperability problems. | ||||
| Also, a small number of errata have been reported. | ||||
| This revision does not change any of the rules of the specification; | ||||
| all texts which were legal JSON remain so, and none which were not | ||||
| JSON become JSON. The revision's goal is to fix the errata and | ||||
| highlight practices which can lead to interoperability problems. | ||||
| 1.3. Changes from RFC 4627 | ||||
| This section lists all changes between this document and the text in | This section lists all changes between this document and the text in | |||
| RFC 4627. | RFC 4627. | |||
| o Applied errata #607 from RFC 4627 to correctly align the artwork | o Changed Working Group attribution to JSON Working Group. | |||
| o Changed title of doc per consensus call at http://www.ietf.org/ | ||||
| mail-archive/web/json/current/msg00736.html | ||||
| o Applied erratum #607 from RFC 4627 to correctly align the artwork | ||||
| for the definition of "object". | for the definition of "object". | |||
| o Change the reference to [UNICODE] to be be non-version-specific. | ||||
| o Applied erratum #3607 from RFC 4627 by removing the security | ||||
| consideration that begins "A JSON text can be safely passed" and | ||||
| the JavaScript code that went with that consideration. | ||||
| o Added Tim Bray as editor. | ||||
| o Added an "Introduction to this Revision" section. | ||||
| o Added language about duplicate object member names and | ||||
| interoperability. | ||||
| o Added language about intereoperability as a function of number | ||||
| ranges and IEEE754. Also added IEEE754 reference. | ||||
| o Added language about interoperability and Unicode characters, and | ||||
| about string comparisons. To do this, turned the old "Encoding" | ||||
| section into a "Character Model" section, with three subsections: | ||||
| The old "Encoding" material, and two new sections for "Unicode | ||||
| Characters" and "String Comparison". | ||||
| o Made a real XML-level "Security Considerations" section, and | ||||
| lifted the text out of the existing "IANA Considerations" section. | ||||
| o Removed the language "Interoperability considerations: n/a" from | ||||
| the "IANA Considerations section. | ||||
| o Added "Contributors" section crediting Douglas Crockford. | ||||
| 2. JSON Grammar | 2. JSON Grammar | |||
| A JSON text is a sequence of tokens. The set of tokens includes six | A JSON text is a sequence of tokens. The set of tokens includes six | |||
| structural characters, strings, numbers, and three literal names. | structural characters, strings, numbers, and three literal names. | |||
| A JSON text is a serialized object or array. | A JSON text is a serialized object or array. | |||
| JSON-text = object / array | JSON-text = object / array | |||
| These are the six structural characters: | These are the six structural characters: | |||
| skipping to change at page 4, line 4 ¶ | skipping to change at page 5, line 10 ¶ | |||
| value-separator = ws %x2C ws ; , comma | value-separator = ws %x2C ws ; , comma | |||
| Insignificant whitespace is allowed before or after any of the six | Insignificant whitespace is allowed before or after any of the six | |||
| structural characters. | structural characters. | |||
| ws = *( | ws = *( | |||
| %x20 / ; Space | %x20 / ; Space | |||
| %x09 / ; Horizontal tab | %x09 / ; Horizontal tab | |||
| %x0A / ; Line feed or New line | %x0A / ; Line feed or New line | |||
| %x0D ; Carriage return | %x0D ; Carriage return | |||
| ) | ) | |||
| 2.1. Values | 3. Values | |||
| A JSON value MUST be an object, array, number, or string, or one of | A JSON value MUST be an object, array, number, or string, or one of | |||
| the following three literal names: | the following three literal names: | |||
| false null true | false null true | |||
| The literal names MUST be lowercase. No other literal names are | The literal names MUST be lowercase. No other literal names are | |||
| allowed. | allowed. | |||
| value = false / null / true / object / array / number / string | value = false / null / true / object / array / number / string | |||
| false = %x66.61.6c.73.65 ; false | false = %x66.61.6c.73.65 ; false | |||
| null = %x6e.75.6c.6c ; null | null = %x6e.75.6c.6c ; null | |||
| true = %x74.72.75.65 ; true | true = %x74.72.75.65 ; true | |||
| 2.2. Objects | 4. Objects | |||
| An object structure is represented as a pair of curly brackets | An object structure is represented as a pair of curly brackets | |||
| surrounding zero or more name/value pairs (or members). A name is a | surrounding zero or more name/value pairs (or members). A name is a | |||
| string. A single colon comes after each name, separating the name | string. A single colon comes after each name, separating the name | |||
| from the value. A single comma separates a value from a following | from the value. A single comma separates a value from a following | |||
| name. The names within an object SHOULD be unique. | name. The names within an object SHOULD be unique. | |||
| object = begin-object [ member *( value-separator member ) ] | object = begin-object [ member *( value-separator member ) ] | |||
| end-object | end-object | |||
| member = string name-separator value | member = string name-separator value | |||
| 2.3. Arrays | An object whose names are all unique is interoperable in the sense | |||
| that all software implementations which receive that object will | ||||
| agree on the name-value mappings. When the names within an object | ||||
| are not unique, the behavior of software that receives such an object | ||||
| is unpredictable. Many implementations report the last name/value | ||||
| pair only; other implementations report an error or fail to parse the | ||||
| object; other implementations report all of the name/value pairs, | ||||
| including duplicates. | ||||
| 5. Arrays | ||||
| An array structure is represented as square brackets surrounding zero | An array structure is represented as square brackets surrounding zero | |||
| or more values (or elements). Elements are separated by commas. | or more values (or elements). Elements are separated by commas. | |||
| array = begin-array [ value *( value-separator value ) ] end-array | array = begin-array [ value *( value-separator value ) ] end-array | |||
| 2.4. Numbers | 6. Numbers | |||
| The representation of numbers is similar to that used in most | The representation of numbers is similar to that used in most | |||
| programming languages. A number contains an integer component that | programming languages. A number contains an integer component that | |||
| may be prefixed with an optional minus sign, which may be followed by | may be prefixed with an optional minus sign, which may be followed by | |||
| a fraction part and/or an exponent part. | a fraction part and/or an exponent part. | |||
| Octal and hex forms are not allowed. Leading zeros are not allowed. | Octal and hex forms are not allowed. Leading zeros are not allowed. | |||
| A fraction part is a decimal point followed by one or more digits. | A fraction part is a decimal point followed by one or more digits. | |||
| An exponent part begins with the letter E in upper or lowercase, | An exponent part begins with the letter E in upper or lowercase, | |||
| skipping to change at page 5, line 40 ¶ | skipping to change at page 7, line 5 ¶ | |||
| frac = decimal-point 1*DIGIT | frac = decimal-point 1*DIGIT | |||
| int = zero / ( digit1-9 *DIGIT ) | int = zero / ( digit1-9 *DIGIT ) | |||
| minus = %x2D ; - | minus = %x2D ; - | |||
| plus = %x2B ; + | plus = %x2B ; + | |||
| zero = %x30 ; 0 | zero = %x30 ; 0 | |||
| 2.5. Strings | This specification allows implementations to set limits on the range | |||
| of numbers accepted. While absolute interoperability cannot be | ||||
| guaranteed, wide interoperability can be achieved by limiting numbers | ||||
| in JSON texts to those within the precision and magnitude expressible | ||||
| in an IEEE 754:20008 binary64 (double precision) number [IEEE754]. | ||||
| Numeric values that cannot be represented in the grammar above (such | ||||
| as Infinity and NaN) are not permitted. Attempting to represent | ||||
| numbers that cannot be exactly encoded as an IEEE 754:2008 binary64 | ||||
| number, such as 1E400, 9007199254740993, or | ||||
| 3.141592653589793238462643383279, may cause interoperability | ||||
| problems. | ||||
| 7. Strings | ||||
| The representation of strings is similar to conventions used in the C | The representation of strings is similar to conventions used in the C | |||
| family of programming languages. A string begins and ends with | family of programming languages. A string begins and ends with | |||
| quotation marks. All Unicode characters may be placed within the | quotation marks. All Unicode characters may be placed within the | |||
| quotation marks except for the characters that must be escaped: | quotation marks except for the characters that must be escaped: | |||
| quotation mark, reverse solidus, and the control characters (U+0000 | quotation mark, reverse solidus, and the control characters (U+0000 | |||
| through U+001F). | through U+001F). | |||
| Any character may be escaped. If the character is in the Basic | Any character may be escaped. If the character is in the Basic | |||
| Multilingual Plane (U+0000 through U+FFFF), then it may be | Multilingual Plane (U+0000 through U+FFFF), then it may be | |||
| skipping to change at page 6, line 42 ¶ | skipping to change at page 8, line 25 ¶ | |||
| %x72 / ; r carriage return U+000D | %x72 / ; r carriage return U+000D | |||
| %x74 / ; t tab U+0009 | %x74 / ; t tab U+0009 | |||
| %x75 4HEXDIG ) ; uXXXX U+XXXX | %x75 4HEXDIG ) ; uXXXX U+XXXX | |||
| escape = %x5C ; \ | escape = %x5C ; \ | |||
| quotation-mark = %x22 ; " | quotation-mark = %x22 ; " | |||
| unescaped = %x20-21 / %x23-5B / %x5D-10FFFF | unescaped = %x20-21 / %x23-5B / %x5D-10FFFF | |||
| 3. Encoding | 8. Character Model | |||
| 8.1. Encoding and Detection | ||||
| JSON text SHALL be encoded in Unicode. The default encoding is | JSON text SHALL be encoded in Unicode. The default encoding is | |||
| UTF-8. | UTF-8. | |||
| Since the first two characters of a JSON text will always be ASCII | Since the first two characters of a JSON text will always be ASCII | |||
| characters [RFC0020], it is possible to determine whether an octet | 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 | 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. | at the pattern of nulls in the first four octets. | |||
| 00 00 00 xx UTF-32BE | 00 00 00 xx UTF-32BE | |||
| 00 xx 00 xx UTF-16BE | 00 xx 00 xx UTF-16BE | |||
| xx 00 00 00 UTF-32LE | xx 00 00 00 UTF-32LE | |||
| xx 00 xx 00 UTF-16LE | xx 00 xx 00 UTF-16LE | |||
| xx xx xx xx UTF-8 | xx xx xx xx UTF-8 | |||
| 4. Parsers | 8.2. Unicode Characters | |||
| A JSON text which is composed entirely of Unicode characters | ||||
| [UNICODE] (however encoded) is interoperable in the sense that all | ||||
| software implementations which parse it will agree on the contents of | ||||
| names and values of object members. However, the ABNF in this | ||||
| specification allows member names and string values to contain bit | ||||
| sequences which cannot encode Unicode characters, for example | ||||
| "\uDEAD" (a single unpaired UTF-16 surrogate). Instances of this | ||||
| have been observed, for example when a library truncates a UTF-16 | ||||
| string without checking whether the truncation split a surrogate | ||||
| pair. The behavior of software which receives JSON texts containing | ||||
| such values is unpredictable; for example, implementations might | ||||
| return different values for the length of a string value, or even | ||||
| suffer a fatal runtime exception. | ||||
| 8.3. String Comparison | ||||
| Software implementations are typically required to test names of | ||||
| object members for equality. Implementations which transform the | ||||
| textual representation into sequences of Unicode code units, and then | ||||
| perform the comparison numerically, code unit by code unit, are | ||||
| interoperable in the sense that implementations will agree in all | ||||
| cases on equality or inequality of two strings. For example, | ||||
| implementations which compare strings with escaped characters | ||||
| unconverted may incorrectly find that "a\b" and "a\u005Cb" are not | ||||
| equal. | ||||
| 9. Parsers | ||||
| A JSON parser transforms a JSON text into another representation. A | A JSON parser transforms a JSON text into another representation. A | |||
| JSON parser MUST accept all texts that conform to the JSON grammar. | JSON parser MUST accept all texts that conform to the JSON grammar. | |||
| A JSON parser MAY accept non-JSON forms or extensions. | A JSON parser MAY accept non-JSON forms or extensions. | |||
| An implementation may set limits on the size of texts that it | An implementation may set limits on the size of texts that it | |||
| accepts. An implementation may set limits on the maximum depth of | accepts. An implementation may set limits on the maximum depth of | |||
| nesting. An implementation may set limits on the range of numbers. | nesting. An implementation may set limits on the range of numbers. | |||
| An implementation may set limits on the length and character contents | An implementation may set limits on the length and character contents | |||
| of strings. | of strings. | |||
| 5. Generators | 10. Generators | |||
| A JSON generator produces JSON text. The resulting text MUST | A JSON generator produces JSON text. The resulting text MUST | |||
| strictly conform to the JSON grammar. | strictly conform to the JSON grammar. | |||
| 6. IANA Considerations | 11. IANA Considerations | |||
| The MIME media type for JSON text is application/json. | The MIME media type for JSON text is application/json. | |||
| Type name: application | Type name: application | |||
| Subtype name: json | Subtype name: json | |||
| Required parameters: n/a | Required parameters: n/a | |||
| Optional parameters: n/a | Optional parameters: n/a | |||
| Encoding considerations: 8bit if UTF-8; binary if UTF-16 or UTF-32 | 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 | 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 | is written in UTF-8, JSON is 8bit compatible. When JSON is | |||
| written in UTF-16 or UTF-32, the binary content-transfer-encoding | written in UTF-16 or UTF-32, the binary content-transfer-encoding | |||
| must be used. | must be used. | |||
| 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. | ||||
| 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 + ')'); | ||||
| Interoperability considerations: n/a | ||||
| Published specification: RFC 4627 | Published specification: RFC 4627 | |||
| Applications that use this media type: | Applications that use this media type: | |||
| JSON has been used to exchange data between applications written | JSON has been used to exchange data between applications written | |||
| in all of these programming languages: ActionScript, C, C#, | in all of these programming languages: ActionScript, C, C#, | |||
| ColdFusion, Common Lisp, E, Erlang, Java, JavaScript, Lua, | ColdFusion, Common Lisp, E, Erlang, Java, JavaScript, Lua, | |||
| Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Scheme. | Objective CAML, Perl, PHP, Python, Rebol, Ruby, and Scheme. | |||
| Additional information: | Additional information: | |||
| skipping to change at page 8, line 48 ¶ | skipping to change at page 11, line 5 ¶ | |||
| Restrictions on usage: none | Restrictions on usage: none | |||
| Author: | Author: | |||
| Douglas Crockford | Douglas Crockford | |||
| douglas@crockford.com | douglas@crockford.com | |||
| Change controller: | Change controller: | |||
| Douglas Crockford | Douglas Crockford | |||
| douglas@crockford.com | douglas@crockford.com | |||
| 7. Security Considerations | 12. Security Considerations | |||
| See Security Considerations in Section 6. | ||||
| 8. Examples | Generally there are security issues with scripting languages. JSON | |||
| is a subset of JavaScript, but excludes assignment and invocation. | ||||
| 13. Examples | ||||
| This is a JSON object: | This is a JSON object: | |||
| { | { | |||
| "Image": { | "Image": { | |||
| "Width": 800, | "Width": 800, | |||
| "Height": 600, | "Height": 600, | |||
| "Title": "View from 15th Floor", | "Title": "View from 15th Floor", | |||
| "Thumbnail": { | "Thumbnail": { | |||
| "Url": "http://www.example.com/image/481989943", | "Url": "http://www.example.com/image/481989943", | |||
| skipping to change at page 10, line 28 ¶ | skipping to change at page 12, line 28 ¶ | |||
| "Latitude": 37.371991, | "Latitude": 37.371991, | |||
| "Longitude": -122.026020, | "Longitude": -122.026020, | |||
| "Address": "", | "Address": "", | |||
| "City": "SUNNYVALE", | "City": "SUNNYVALE", | |||
| "State": "CA", | "State": "CA", | |||
| "Zip": "94085", | "Zip": "94085", | |||
| "Country": "US" | "Country": "US" | |||
| } | } | |||
| ] | ] | |||
| 9. Normative References | 14. Contributors | |||
| RFC 4627 was written by Douglas Crockford. This document was | ||||
| constructed by making a relatively small number of additions to and | ||||
| subtractions from that document; thus the vast majority of the text | ||||
| here is his. | ||||
| 15. Normative References | ||||
| [ECMA] European Computer Manufacturers Association, "ECMAScript | [ECMA] European Computer Manufacturers Association, "ECMAScript | |||
| Language Specification 3rd Edition ", December 1999, | Language Specification 3rd Edition ", December 1999, | |||
| <http://www.ecma-international.org/publications/files/ | <http://www.ecma-international.org/publications/files/ | |||
| ecma-st/ECMA-262.pdf>. | ecma-st/ECMA-262.pdf>. | |||
| [IEEE754] IEEE, "IEEE Standard for Floating-Point Arithmetic", 2008, | ||||
| <http://grouper.ieee.org/groups/754/>. | ||||
| [RFC0020] Cerf, V., "ASCII format for network interchange", RFC 20, | [RFC0020] Cerf, V., "ASCII format for network interchange", RFC 20, | |||
| October 1969. | October 1969. | |||
| [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
| Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
| [RFC4234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC4234] Crocker, D., Ed. and P. Overell, "Augmented BNF for | |||
| Specifications: ABNF", RFC 4234, October 2005. | Syntax Specifications: ABNF", RFC 4234, October 2005. | |||
| [UNICODE] The Unicode Consortium, "The Unicode Standard, Version 4.0 | [UNICODE] The Unicode Consortium, "The Unicode Standard, Version 4.0 | |||
| ", 2003, <http://www.unicode.org/versions/Unicode4.1.0/>. | ", 2003, <http://www.unicode.org/versions/latest/>. | |||
| Author's Address | Author's Address | |||
| Douglas Crockford | Tim Bray (editor) | |||
| JSON.org | Google, Inc. | |||
| Email: douglas@crockford.com | Email: tbray@textuality.com | |||
| End of changes. 27 change blocks. | ||||
| 63 lines changed or deleted | 161 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ | ||||