< 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/