| < draft-ietf-json-rfc4627bis-05.txt | draft-ietf-json-rfc4627bis-06.txt > | |||
|---|---|---|---|---|
| JSON Working Group T. Bray, Ed. | JSON Working Group T. Bray, Ed. | |||
| Internet-Draft Google, Inc. | Internet-Draft Google, Inc. | |||
| Obsoletes: 4627 (if approved) October 08, 2013 | Obsoletes: 4627 (if approved) October 11, 2013 | |||
| Intended status: Standards Track | Intended status: Standards Track | |||
| Expires: April 11, 2014 | Expires: April 14, 2014 | |||
| The JSON Data Interchange Format | The JSON Data Interchange Format | |||
| draft-ietf-json-rfc4627bis-05 | draft-ietf-json-rfc4627bis-06 | |||
| 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 35 ¶ | skipping to change at page 1, line 35 ¶ | |||
| 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 April 11, 2014. | This Internet-Draft will expire on April 14, 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 | |||
| skipping to change at page 2, line 21 ¶ | skipping to change at page 2, line 21 ¶ | |||
| 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 . . . . . . . . . . . . 3 | 1.1. Conventions Used in This Document . . . . . . . . . . . . 3 | |||
| 1.2. Specifications of JSON . . . . . . . . . . . . . . . . . 3 | 1.2. Specifications of JSON . . . . . . . . . . . . . . . . . 3 | |||
| 1.3. Introduction to This Revision . . . . . . . . . . . . . . 3 | 1.3. Introduction to This Revision . . . . . . . . . . . . . . 3 | |||
| 1.4. Changes from RFC 4627 . . . . . . . . . . . . . . . . . . 4 | 2. JSON Grammar . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 2. JSON Grammar . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 4. Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4. Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 5. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 5. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 6. Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 6. Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 7. Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 7. Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 | 8. String and Character Issues . . . . . . . . . . . . . . . . . 8 | |||
| 8. String and Character Issues . . . . . . . . . . . . . . . . . 9 | 8.1. Encoding and Detection . . . . . . . . . . . . . . . . . 8 | |||
| 8.1. Encoding and Detection . . . . . . . . . . . . . . . . . 9 | 8.2. Unicode Characters . . . . . . . . . . . . . . . . . . . 8 | |||
| 8.2. Unicode Characters . . . . . . . . . . . . . . . . . . . 9 | 8.3. String Comparison . . . . . . . . . . . . . . . . . . . . 9 | |||
| 8.3. String Comparison . . . . . . . . . . . . . . . . . . . . 10 | 9. Parsers . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 9. Parsers . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 10. Generators . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 10. Generators . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 12. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
| 12. Security Considerations . . . . . . . . . . . . . . . . . . . 12 | 13. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 13. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 14. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 14. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 13 | 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 13 | 15.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
| 15.1. Normative References . . . . . . . . . . . . . . . . . . 13 | 15.2. Informative References . . . . . . . . . . . . . . . . . 12 | |||
| 15.2. Informative References . . . . . . . . . . . . . . . . . 14 | Appendix A. Changes from RFC 4627 . . . . . . . . . . . . . . . 12 | |||
| Appendix A. Changes in -04 . . . . . . . . . . . . . . . . . . . 14 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| Appendix B. Changes in -05 . . . . . . . . . . . . . . . . . . . 14 | ||||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 15 | ||||
| 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-262]. | Language Standard, Third Edition [ECMA-262]. | |||
| 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 29 ¶ | skipping to change at page 3, line 26 ¶ | |||
| 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 [RFC5234]. | |||
| 1.2. Specifications of JSON | 1.2. Specifications of JSON | |||
| A description of JSON in ECMAScript terms first appeared in version | This document is an update of [RFC4627], which described JSON and | |||
| 5.1 of the ECMAScript specification [ECMA-262], section 15.12. It | registered the Media Type "application/json". | |||
| includes a description of the differences between JSON as described | ||||
| in that specification and in RFC4627. The most significant is that | ||||
| ECMAScript 5.1 does not require a JSON Text to be an Array or an | ||||
| Object; thus, for example, "Hello world!", "42", and "true" would all | ||||
| be valid JSON texts in the ECMAScript 5.1 context. | ||||
| JSON is also described in [ECMA-404]. | A description of JSON in ECMAScript terms appears in version 5.1 of | |||
| the ECMAScript specification [ECMA-262], section 15.12. JSON is also | ||||
| described in [ECMA-404]. ECMAscript 5.1 enumerates the differences | ||||
| between JSON as described in that specification and in RFC4627. The | ||||
| most significant is that ECMAScript 5.1 does not require a JSON Text | ||||
| to be an Array or an Object; thus, for example, these constructs | ||||
| would all be valid JSON texts in the ECMAScript context: | ||||
| None of the specifications of JSON syntax disagree on the syntax of | o "Hello world!" | |||
| the language. | ||||
| 1.3. Introduction to This Revision | o 42 | |||
| o true | ||||
| All of the specifications of JSON syntax agree on the syntactic | ||||
| elements of the language. | ||||
| 1.3. Introduction to This Revision | ||||
| In the years since the publication of RFC 4627, JSON has found very | In the years since the publication of RFC 4627, JSON has found very | |||
| wide use. This experience has revealed certain patterns which, while | wide use. This experience has revealed certain patterns which, while | |||
| allowed by its specifications, have caused interoperability problems. | allowed by its specifications, have caused interoperability problems. | |||
| Also, a small number of errata have been reported. | Also, a small number of errata have been reported. | |||
| This revision does not change any of the rules of the specification; | 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 | 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 | JSON become JSON. The revision's goal is to fix the errata and | |||
| highlight practices which can lead to interoperability problems. | highlight practices which can lead to interoperability problems. | |||
| 1.4. Changes from RFC 4627 | ||||
| This section lists all changes between this document and the text in | ||||
| RFC 4627. | ||||
| o Changed Working Group attribution to JSON Working Group. | ||||
| o Changed title of document. | ||||
| o Change the reference to [UNICODE] to be be non-version-specific. | ||||
| o Added a "Specifications of JSON" section. | ||||
| o Added an "Introduction to this Revision" section. | ||||
| o Added language about duplicate object member names and | ||||
| interoperability. | ||||
| o Applied erratum #607 from RFC 4627 to correctly align the artwork | ||||
| for the definition of "object". | ||||
| o Changed "as sequences of digits" to "in the grammar below" in | ||||
| "Numbers" section. | ||||
| o Added language about number interoperability as a function of | ||||
| IEEE754, and an IEEE754 reference. | ||||
| o Added language about interoperability and Unicode characters, and | ||||
| about string comparisons. To do this, turned the old "Encoding" | ||||
| section into a "String and Character Issues" section, with three | ||||
| subsections: The old "Encoding" material, and two new sections for | ||||
| "Unicode Characters" and "String Comparison". | ||||
| o Changed guidance in "Parsers" section to point out that | ||||
| implementations may set limits on the range "and precision" of | ||||
| numbers. | ||||
| o Removed the language "Interoperability considerations: n/a" from | ||||
| the "IANA Considerations" section. | ||||
| o Made a real "Security Considerations" section, and lifted the text | ||||
| out of the existing "IANA Considerations" section. | ||||
| 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 a note to the "Security Considerations" section pointing out | ||||
| the risks of using the "eval()" function in JavaScript or any | ||||
| other language in which JSON texts conform to that language's | ||||
| syntax. | ||||
| o Added "Contributors" section crediting Douglas Crockford. | ||||
| o Moved the ECMAScript reference from Normative to Informative, | ||||
| updated it to reference ECMAScript 5.1, and added reference to | ||||
| ECMA 404. | ||||
| 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 6, line 9 ¶ | skipping to change at page 4, line 45 ¶ | |||
| 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 | |||
| ) | ||||
| 3. 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 | |||
| skipping to change at page 8, line 7 ¶ | skipping to change at page 6, line 45 ¶ | |||
| int = zero / ( digit1-9 *DIGIT ) | int = zero / ( digit1-9 *DIGIT ) | |||
| minus = %x2D ; - | minus = %x2D ; - | |||
| plus = %x2B ; + | plus = %x2B ; + | |||
| zero = %x30 ; 0 | zero = %x30 ; 0 | |||
| This specification allows implementations to set limits on the range | This specification allows implementations to set limits on the range | |||
| and precision of numbers accepted. Since software which implements | and precision of numbers accepted. Since software which implements | |||
| IEEE 754-2008 [IEEE754] is generally available and widely used, good | IEEE 754-2008 binary64 (double precision) numbers [IEEE754] is | |||
| interoperability can be achieved by implementations which expect no | generally available and widely used, good interoperability can be | |||
| more precision or range than provided by an IEEE 754 binary64 (double | achieved by implementations which expect no more precision or range | |||
| precision) number, in the sense that implementations will approximate | than these provide, in the sense that implementations will | |||
| JSON numbers within the expected precision. A JSON number which is | approximate JSON numbers within the expected precision. A JSON | |||
| outside those bounds, such as 1E400 or | number such as 1E400 or 3.141592653589793238462643383279 may indicate | |||
| 3.141592653589793238462643383279, may indicate potential | potential interoperability problems since it suggests that the | |||
| interoperability problems since it suggests that the software which | software which created it it expected greater magnitude or precision | |||
| created it it expected greater magnitude or precision than is widely | than is widely available. | |||
| available. | ||||
| Note that when such software is used, numbers which are integers and | Note that when such software is used, numbers which are integers and | |||
| are in the range [-(2**53)+1, (2**53)-1] are interoperable in the | are in the range [-(2**53)+1, (2**53)-1] are interoperable in the | |||
| sense that implementations will agree exactly on their numeric | sense that implementations will agree exactly on their numeric | |||
| values. | values. | |||
| 7. Strings | 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 | |||
| skipping to change at page 11, line 4 ¶ | skipping to change at page 9, line 45 ¶ | |||
| nesting. An implementation may set limits on the range and precision | nesting. An implementation may set limits on the range and precision | |||
| of numbers. An implementation may set limits on the length and | of numbers. An implementation may set limits on the length and | |||
| character contents of strings. | character contents of strings. | |||
| 10. 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. | |||
| 11. 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. | ||||
| Published specification: RFC 4627 | ||||
| Applications that use this media type: | Interoperability considerations: Described in this document | |||
| JSON has been used to exchange data between applications written | Published specification: This document | |||
| 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. | ||||
| Additional information: | 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#, Clojure, ColdFusion, Common Lisp, | ||||
| E, Erlang, Go, Java, JavaScript, Lua, Objective CAML, Perl, PHP, | ||||
| Python, Rebol, Ruby, Scala, and Scheme. | ||||
| Magic number(s): n/a | Additional information: Magic number(s): n/a | |||
| File extension(s): .json | File extension(s): .json | |||
| Macintosh file type code(s): TEXT | Macintosh file type code(s): TEXT | |||
| Person & email address to contact for further information: | Person & email address to contact for further information: IESG | |||
| Douglas Crockford | <iesg@ietf.org | |||
| douglas@crockford.com | ||||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Restrictions on usage: none | Restrictions on usage: none | |||
| Author: | Author: Douglas Crockford | |||
| Douglas Crockford | douglas@crockford.com | |||
| douglas@crockford.com | ||||
| Change controller: | Change controller: IESG | |||
| Douglas Crockford | <iesg@ietf.org | |||
| douglas@crockford.com | ||||
| 12. Security Considerations | 12. Security Considerations | |||
| Generally there are security issues with scripting languages. JSON | Generally there are security issues with scripting languages. JSON | |||
| is a subset of JavaScript, but excludes assignment and invocation. | is a subset of JavaScript, but excludes assignment and invocation. | |||
| Since JSON's syntax is borrowed from JavaScript, it is possible to | Since JSON's syntax is borrowed from JavaScript, it is possible to | |||
| use that language's "eval()" function to parse JSON texts. This | use that language's "eval()" function to parse JSON texts. This | |||
| generally constitutes an unacceptable security risk, since the text | generally constitutes an unacceptable security risk, since the text | |||
| could contain executable code along with data declarations. The same | could contain executable code along with data declarations. The same | |||
| consideration applies in any other programming languages in which | consideration applies in any other programming language in which JSON | |||
| JSON texts conform to that language's syntax. | texts conform to that language's syntax. | |||
| 13. Examples | 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", | |||
| "Height": 125, | "Height": 125, | |||
| "Width": "100" | "Width": 100 | |||
| }, | }, | |||
| "Animated" : false, | ||||
| "IDs": [116, 943, 234, 38793] | "IDs": [116, 943, 234, 38793] | |||
| } | } | |||
| } | } | |||
| Its Image member is an object whose Thumbnail member is an object and | Its Image member is an object whose Thumbnail member is an object and | |||
| whose IDs member is an array of numbers. | whose IDs member is an array of numbers. | |||
| This is a JSON array containing two objects: | This is a JSON array containing two objects: | |||
| [ | [ | |||
| skipping to change at page 13, line 29 ¶ | skipping to change at page 12, line 4 ¶ | |||
| "Longitude": -122.026020, | "Longitude": -122.026020, | |||
| "Address": "", | "Address": "", | |||
| "City": "SUNNYVALE", | "City": "SUNNYVALE", | |||
| "State": "CA", | "State": "CA", | |||
| "Zip": "94085", | "Zip": "94085", | |||
| "Country": "US" | "Country": "US" | |||
| } | } | |||
| ] | ] | |||
| 14. Contributors | 14. Contributors | |||
| RFC 4627 was written by Douglas Crockford. This document was | RFC 4627 was written by Douglas Crockford. This document was | |||
| constructed by making a relatively small number of changes to that | constructed by making a relatively small number of changes to that | |||
| document; thus the vast majority of the text here is his. | document; thus the vast majority of the text here is his. | |||
| 15. References | 15. References | |||
| 15.1. Normative References | 15.1. Normative References | |||
| [IEEE754] IEEE, "IEEE Standard for Floating-Point Arithmetic", 2008, | [IEEE754] IEEE, "IEEE Standard for Floating-Point Arithmetic", 2008, | |||
| <http://grouper.ieee.org/groups/754/>. | <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 | [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
| Syntax Specifications: ABNF", RFC 4234, October 2005. | Specifications: ABNF", STD 68, RFC 5234, January 2008. | |||
| [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/latest/>. | ", 2003, <http://www.unicode.org/versions/latest/>. | |||
| 15.2. Informative References | 15.2. Informative References | |||
| [ECMA-262] | [ECMA-262] | |||
| European Computer Manufacturers Association, "ECMAScript | European Computer Manufacturers Association, "ECMAScript | |||
| Language Specification 5.1 Edition ", June 2011, <http:// | Language Specification 5.1 Edition ", June 2011, <http:// | |||
| www.ecma-international.org/ecma-262/5.1/>. | www.ecma-international.org/ecma-262/5.1/>. | |||
| [ECMA-404] | [ECMA-404] | |||
| Ecma International, "The JSON Data Interchange Format ", | Ecma International, "The JSON Data Interchange Format ", | |||
| October 2013, <http://www.ecma-international.org/ | October 2013, <http://www.ecma-international.org/ | |||
| publications/standards/Ecma-404.htm>. | publications/standards/Ecma-404.htm>. | |||
| Appendix A. Changes in -04 | [RFC4627] Crockford, D., "The application/json Media Type for | |||
| JavaScript Object Notation (JSON)", RFC 4627, July 2006. | ||||
| o Reworded Section 8.2 to talk about strings that are represented in | Appendix A. Changes from RFC 4627 | |||
| the JSON text, rather than the actual text itself. Also fine- | ||||
| tuned the "will agree on" clause in the interoperability | ||||
| description. | ||||
| o Changed "20008" to "2008". | This section lists changes between this document and the text in RFC | |||
| 4627. | ||||
| o Reworded numeric-interoperability language following on WG | o Changed Working Group attribution to JSON Working Group. | |||
| discussion, notably referring to availability of software that | ||||
| does IEEE754 and "approximate JSON numbers within the expected | o Changed title of document. | |||
| precision". Also took out duplicate language about NaN and Inf. | ||||
| o Change the reference to [UNICODE] to be be non-version-specific. | ||||
| o Added a "Specifications of JSON" section. | ||||
| o Added an "Introduction to this Revision" section. | ||||
| o Added language about duplicate object member names and | ||||
| interoperability. | ||||
| o Applied erratum #607 from RFC 4627 to correctly align the artwork | ||||
| for the definition of "object". | ||||
| o Changed "as sequences of digits" to "in the grammar below" in | o Changed "as sequences of digits" to "in the grammar below" in | |||
| "Numbers" section. | "Numbers" section. | |||
| Appendix B. Changes in -05 | o Added language about number interoperability as a function of | |||
| IEEE754, and an IEEE754 reference. | ||||
| o Removed the numbers-interop text about "frac" and "exp" parts. | o Added language about interoperability and Unicode characters, and | |||
| about string comparisons. To do this, turned the old "Encoding" | ||||
| section into a "String and Character Issues" section, with three | ||||
| subsections: The old "Encoding" material, and two new sections for | ||||
| "Unicode Characters" and "String Comparison". | ||||
| o Added the obsoletes 4627 attribute. | o Changed guidance in "Parsers" section to point out that | |||
| implementations may set limits on the range "and precision" of | ||||
| numbers. | ||||
| o Moved the EcmaScript ref from normative to informative, and | o Updated and tidied the "IANA Considerations" section. | |||
| redirected to point at 5.1. | ||||
| o Changed numbers language to say that implementations can impose | o Made a real "Security Considerations" section, and lifted the text | |||
| limits on range *and precision*. | out of the existing "IANA Considerations" section. | |||
| o Changed section title from "Character Model" to "String and | o Applied erratum #3607 from RFC 4627 by removing the security | |||
| Character Issues". | consideration that begins "A JSON text can be safely passed" and | |||
| the JavaScript code that went with that consideration. | ||||
| o Added "Specifications of JSON" section, and included a reference | o Added a note to the "Security Considerations" section pointing out | |||
| to ECMA-404. | the risks of using the "eval()" function in JavaScript or any | |||
| other language in which JSON texts conform to that language's | ||||
| syntax. | ||||
| o Removed the consensus-call link from the list of changes. | o Changed "100" to 100 and added a boolean field, both in the first | |||
| example. | ||||
| o Added a paragraph about not using eval() in JavaScript or other | o Added "Contributors" section crediting Douglas Crockford. | |||
| languaegs where JSON syntax matches that language's syntax. | ||||
| o Reorganized the list of changes so they're ordered like the spec, | o Added a reference to RFC4627. | |||
| and cleaned up language a bit. | ||||
| o Moved the ECMAScript reference from Normative to Informative, | ||||
| updated it to reference ECMAScript 5.1, and added reference to | ||||
| ECMA 404. | ||||
| Author's Address | Author's Address | |||
| Tim Bray (editor) | Tim Bray (editor) | |||
| Google, Inc. | Google, Inc. | |||
| Email: tbray@textuality.com | Email: tbray@textuality.com | |||
| End of changes. 45 change blocks. | ||||
| 170 lines changed or deleted | 129 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/ | ||||