| < draft-ietf-json-rfc4627bis-06.txt | draft-ietf-json-rfc4627bis-07.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 11, 2013 | Obsoletes: 4627 (if approved) November 06, 2013 | |||
| Intended status: Standards Track | Intended status: Standards Track | |||
| Expires: April 14, 2014 | Expires: May 10, 2014 | |||
| The JSON Data Interchange Format | The JSON Data Interchange Format | |||
| draft-ietf-json-rfc4627bis-06 | draft-ietf-json-rfc4627bis-07 | |||
| 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. | |||
| This document makes no changes to the definition of JSON; it repairs | ||||
| specification errors and offers experience-based interoperability | ||||
| guidance. | ||||
| Status of This Memo | Status of This Memo | |||
| This Internet-Draft is submitted in full conformance with the | This Internet-Draft is submitted in full conformance with the | |||
| provisions of BCP 78 and BCP 79. | provisions of BCP 78 and BCP 79. | |||
| 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 14, 2014. | This Internet-Draft will expire on May 10, 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 20 ¶ | skipping to change at page 2, line 15 ¶ | |||
| 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 . . . . . . . . . . . . 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 . . . . . . . . . . . . . . 4 | |||
| 2. JSON Grammar . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. JSON Grammar . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
| 3. Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 4 | 3. Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 4. Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 4. Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
| 5. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 5. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 6. Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 6. Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | |||
| 7. Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | 7. Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 | |||
| 8. String and Character Issues . . . . . . . . . . . . . . . . . 8 | 8. String and Character Issues . . . . . . . . . . . . . . . . . 8 | |||
| 8.1. Encoding and Detection . . . . . . . . . . . . . . . . . 8 | 8.1. Encoding and Detection . . . . . . . . . . . . . . . . . 8 | |||
| 8.2. Unicode Characters . . . . . . . . . . . . . . . . . . . 8 | 8.2. Unicode Characters . . . . . . . . . . . . . . . . . . . 8 | |||
| 8.3. String Comparison . . . . . . . . . . . . . . . . . . . . 9 | 8.3. String Comparison . . . . . . . . . . . . . . . . . . . . 9 | |||
| 9. Parsers . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 9. Parsers . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 10. Generators . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 10. Generators . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 9 | |||
| 12. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | 12. Security Considerations . . . . . . . . . . . . . . . . . . . 10 | |||
| 13. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 13. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
| 14. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 11 | 14. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
| 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 15. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
| 15.1. Normative References . . . . . . . . . . . . . . . . . . 12 | 15.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
| 15.2. Informative References . . . . . . . . . . . . . . . . . 12 | 15.2. Informative References . . . . . . . . . . . . . . . . . 12 | |||
| Appendix A. Changes from RFC 4627 . . . . . . . . . . . . . . . 12 | Appendix A. Changes from RFC 4627 . . . . . . . . . . . . . . . 13 | |||
| Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 14 | Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
| 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, | |||
| skipping to change at page 3, line 38 ¶ | skipping to change at page 3, line 36 ¶ | |||
| 1.2. Specifications of JSON | 1.2. Specifications of JSON | |||
| This document is an update of [RFC4627], which described JSON and | This document is an update of [RFC4627], which described JSON and | |||
| registered the Media Type "application/json". | registered the Media Type "application/json". | |||
| A description of JSON in ECMAScript terms appears in version 5.1 of | A description of JSON in ECMAScript terms appears in version 5.1 of | |||
| the ECMAScript specification [ECMA-262], section 15.12. JSON is also | the ECMAScript specification [ECMA-262], section 15.12. JSON is also | |||
| described in [ECMA-404]. ECMAscript 5.1 enumerates the differences | described in [ECMA-404]. ECMAscript 5.1 enumerates the differences | |||
| between JSON as described in that specification and in RFC4627. The | between JSON as described in that specification and in RFC4627. The | |||
| most significant is that ECMAScript 5.1 does not require a JSON Text | 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 | to be an Array or an Object; thus, for example, the following would | |||
| would all be valid JSON texts in the ECMAScript context: | all be valid JSON texts in the ECMAScript context: | |||
| o "Hello world!" | o "Hello world!" | |||
| o 42 | o 42 | |||
| o true | o true | |||
| All of the specifications of JSON syntax agree on the syntactic | All of the specifications of JSON syntax agree on the syntactic | |||
| elements of the language. | elements of the language. | |||
| skipping to change at page 9, line 48 ¶ | skipping to change at page 9, line 45 ¶ | |||
| 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 | ||||
| Encoding considerations: 8bit if UTF-8; binary if UTF-16 or UTF-32. | 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 | 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. | |||
| Interoperability considerations: Described in this document | Interoperability considerations: Described in this document | |||
| Published specification: This document | Published specification: This document | |||
| Applications that use this media type: JSON has been used to exchange | Applications that use this media type: JSON has been used to | |||
| data between applications written in all of these programming | exchange data between applications written in all of these | |||
| languages: ActionScript, C, C#, Clojure, ColdFusion, Common Lisp, | programming languages: ActionScript, C, C#, Clojure, ColdFusion, | |||
| E, Erlang, Go, Java, JavaScript, Lua, Objective CAML, Perl, PHP, | Common Lisp, E, Erlang, Go, Java, JavaScript, Lua, Objective CAML, | |||
| Python, Rebol, Ruby, Scala, and Scheme. | Perl, PHP, Python, Rebol, Ruby, Scala, and Scheme. | |||
| Additional information: 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: IESG | Person & email address to contact for further information: IESG | |||
| <iesg@ietf.org | <iesg@ietf.org | |||
| Intended usage: COMMON | Intended usage: COMMON | |||
| Restrictions on usage: none | Restrictions on usage: none | |||
| Author: Douglas Crockford | Author: Douglas Crockford | |||
| douglas@crockford.com | douglas@crockford.com | |||
| Change controller: IESG | Change controller: IESG | |||
| <iesg@ietf.org | <iesg@ietf.org | |||
| 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 | |||
| skipping to change at page 12, line 24 ¶ | skipping to change at page 12, line 24 ¶ | |||
| [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. | |||
| [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax | |||
| Specifications: ABNF", STD 68, RFC 5234, January 2008. | 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", 2003-, | |||
| ", 2003, <http://www.unicode.org/versions/latest/>. | <http://www.unicode.org/versions/latest/>. | |||
| Note that this reference is to the latest version of | ||||
| Unicode, rather than to a specific release. It is not | ||||
| expected that future changes in the UNICODE specification | ||||
| will impact the syntax of JSON. | ||||
| 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, | |||
| www.ecma-international.org/ecma-262/5.1/>. | <http://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>. | |||
| [RFC4627] Crockford, D., "The application/json Media Type for | [RFC4627] Crockford, D., "The application/json Media Type for | |||
| JavaScript Object Notation (JSON)", RFC 4627, July 2006. | JavaScript Object Notation (JSON)", RFC 4627, July 2006. | |||
| Appendix A. Changes from RFC 4627 | Appendix A. Changes from RFC 4627 | |||
| This section lists changes between this document and the text in RFC | This section lists changes between this document and the text in RFC | |||
| 4627. | 4627. | |||
| o Changed Working Group attribution to JSON Working Group. | o Changed Working Group attribution to JSON Working Group. | |||
| o Changed title of document. | o Changed title and abstract of document. | |||
| o Change the reference to [UNICODE] to be be non-version-specific. | o Change the reference to [UNICODE] to be be non-version-specific. | |||
| o Added a "Specifications of JSON" section. | o Added a "Specifications of JSON" section. | |||
| o Added an "Introduction to this Revision" section. | o Added an "Introduction to this Revision" section. | |||
| o Added language about duplicate object member names and | o Added language about duplicate object member names and | |||
| interoperability. | interoperability. | |||
| End of changes. 26 change blocks. | ||||
| 33 lines changed or deleted | 42 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/ | ||||