rfc8259.original | rfc8259.txt | |||
---|---|---|---|---|
JSONbis T. Bray, Ed. | Internet Engineering Task Force (IETF) T. Bray, Ed. | |||
Internet-Draft Textuality | Request for Comments: 8259 Textuality | |||
Obsoletes: 7159 (if approved) July 17, 2017 | Obsoletes: 7159 August 2017 | |||
Intended status: Standards Track | Category: Standards Track | |||
Expires: January 18, 2018 | ISSN: 2070-1721 | |||
The JavaScript Object Notation (JSON) Data Interchange Format | The JavaScript Object Notation (JSON) Data Interchange Format | |||
draft-ietf-jsonbis-rfc7159bis-04 | ||||
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 removes inconsistencies with other specifications of | This document removes inconsistencies with other specifications of | |||
JSON, repairs specification errors, and offers experience-based | JSON, repairs specification errors, and offers experience-based | |||
interoperability guidance. | interoperability guidance. | |||
Status of This Memo | Status of This Memo | |||
This Internet-Draft is submitted in full conformance with the | This is an Internet Standards Track document. | |||
provisions of BCP 78 and BCP 79. | ||||
Internet-Drafts are working documents of the Internet Engineering | ||||
Task Force (IETF). Note that other groups may also distribute | ||||
working documents as Internet-Drafts. The list of current Internet- | ||||
Drafts is at http://datatracker.ietf.org/drafts/current/. | ||||
Internet-Drafts are draft documents valid for a maximum of six months | This document is a product of the Internet Engineering Task Force | |||
and may be updated, replaced, or obsoleted by other documents at any | (IETF). It represents the consensus of the IETF community. It has | |||
time. It is inappropriate to use Internet-Drafts as reference | received public review and has been approved for publication by the | |||
material or to cite them other than as "work in progress." | Internet Engineering Steering Group (IESG). Further information on | |||
Internet Standards is available in Section 2 of RFC 7841. | ||||
This Internet-Draft will expire on January 18, 2018. | Information about the current status of this document, any errata, | |||
and how to provide feedback on it may be obtained at | ||||
http://www.rfc-editor.org/info/rfc8259. | ||||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2017 IETF Trust and the persons identified as the | Copyright (c) 2017 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 24 | skipping to change at page 2, line 21 | |||
modifications of such material outside the IETF Standards Process. | modifications of such material outside the IETF Standards Process. | |||
Without obtaining an adequate license from the person(s) controlling | Without obtaining an adequate license from the person(s) controlling | |||
the copyright in such materials, this document may not be modified | the copyright in such materials, this document may not be modified | |||
outside the IETF Standards Process, and derivative works of it may | outside the IETF Standards Process, and derivative works of it may | |||
not be created outside the IETF Standards Process, except to format | not be created outside the IETF Standards Process, except to format | |||
it for publication as an RFC or to translate it into languages other | it for publication as an RFC or to translate it into languages other | |||
than English. | than English. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 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 . . . . . . . . . . . . . . 4 | 1.3. Introduction to This Revision . . . . . . . . . . . . . . 4 | |||
2. JSON Grammar . . . . . . . . . . . . . . . . . . . . . . . . 4 | 2. JSON Grammar . . . . . . . . . . . . . . . . . . . . . . . . 4 | |||
3. Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 3. Values . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
4. Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | 4. Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 | |||
5. Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 | 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. Character Encoding . . . . . . . . . . . . . . . . . . . 8 | 8.1. Character Encoding . . . . . . . . . . . . . . . . . . . 8 | |||
8.2. Unicode Characters . . . . . . . . . . . . . . . . . . . 9 | 8.2. Unicode Characters . . . . . . . . . . . . . . . . . . . 9 | |||
8.3. String Comparison . . . . . . . . . . . . . . . . . . . . 9 | 8.3. String Comparison . . . . . . . . . . . . . . . . . . . . 9 | |||
9. Parsers . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | 9. Parsers . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 | |||
10. Generators . . . . . . . . . . . . . . . . . . . . . . . . . 10 | 10. Generators . . . . . . . . . . . . . . . . . . . . . . . . . 10 | |||
11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | 11. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 10 | |||
12. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | 12. Security Considerations . . . . . . . . . . . . . . . . . . . 11 | |||
13. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | 13. Examples . . . . . . . . . . . . . . . . . . . . . . . . . . 11 | |||
14. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 12 | 14. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
15. References . . . . . . . . . . . . . . . . . . . . . . . . . 12 | 14.1. Normative References . . . . . . . . . . . . . . . . . . 12 | |||
15.1. Normative References . . . . . . . . . . . . . . . . . . 13 | 14.2. Informative References . . . . . . . . . . . . . . . . . 13 | |||
15.2. Informative References . . . . . . . . . . . . . . . . . 13 | Appendix A. Changes from RFC 7159 . . . . . . . . . . . . . . . 14 | |||
Appendix A. Changes from RFC 7159 . . . . . . . . . . . . . . . 15 | Contributors . . . . . . . . . . . . . . . . . . . . . . . . . . 14 | |||
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 15 | 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, | |||
and null) and two structured types (objects and arrays). | and null) and two structured types (objects and arrays). | |||
A string is a sequence of zero or more Unicode characters [UNICODE]. | A string is a sequence of zero or more Unicode characters [UNICODE]. | |||
Note that this citation references the latest version of Unicode | Note that this citation references the latest version of Unicode | |||
rather than a specific release. It is not expected that future | rather than a specific release. It is not expected that future | |||
changes in the UNICODE specification will impact the syntax of JSON. | changes in the Unicode specification will impact the syntax of JSON. | |||
An object is an unordered collection of zero or more name/value | An object is an unordered collection of zero or more name/value | |||
pairs, where a name is a string and a value is a string, number, | pairs, where a name is a string and a value is a string, number, | |||
boolean, null, object, or array. | boolean, null, object, or array. | |||
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", "NOT RECOMMENDED", "MAY", and | |||
document are to be interpreted as described in [RFC2119]. | "OPTIONAL" in this document are to be interpreted as described in BCP | |||
14 [RFC2119] [RFC8174] when, and only when, they appear in all | ||||
capitals, as shown here. | ||||
The grammatical rules in this document are to be interpreted as | The grammatical rules in this document are to be interpreted as | |||
described in [RFC5234]. | described in [RFC5234]. | |||
1.2. Specifications of JSON | 1.2. Specifications of JSON | |||
This document updates [RFC4627], which describes JSON and registers | This document replaces [RFC7159]. RFC 7159 obsoleted RFC 4627, which | |||
the media type "application/json". | originally described JSON and registered the media type "application/ | |||
json". | ||||
JSON is also described in [ECMA-404]. | JSON is also described in [ECMA-404]. | |||
The reference to ECMA-404 in the previous sentence is normative, not | The reference to ECMA-404 in the previous sentence is normative, not | |||
with the usual meaning that implementors need to consult it in order | with the usual meaning that implementors need to consult it in order | |||
to understand this document, but to emphasize that there are no | to understand this document, but to emphasize that there are no | |||
inconsistencies in the definition of the term "JSON text" in any of | inconsistencies in the definition of the term "JSON text" in any of | |||
its specifications. Note, however, that ECMA-404 allows several | its specifications. Note, however, that ECMA-404 allows several | |||
practices which this specification recommends avoiding in the | practices that this specification recommends avoiding in the | |||
interests of maximal interoperability. | interests of maximal interoperability. | |||
The intent is that the grammar is the same between the two documents, | The intent is that the grammar is the same between the two documents, | |||
although different descriptions are used. If there a difference is | although different descriptions are used. If there is a difference | |||
found between them, ECMA and the IETF will work together to update | found between them, ECMA and the IETF will work together to update | |||
both documents. | both documents. | |||
If an error is found with either document, the other should be | If an error is found with either document, the other should be | |||
examined to see if it has a similar error, and fixed if possible. | examined to see if it has a similar error; if it does, it should be | |||
fixed, if possible. | ||||
If either document is changed in the future, ECMA and the IETF will | If either document is changed in the future, ECMA and the IETF will | |||
work together to ensure that the two documents stay aligned through | work together to ensure that the two documents stay aligned through | |||
the change. | the change. | |||
1.3. Introduction to This Revision | 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, | wide use. This experience has revealed certain patterns that, while | |||
while allowed by its specifications, have caused interoperability | allowed by its specifications, have caused interoperability problems. | |||
problems. | ||||
Also, a small number of errata have been reported to RFC4627 (see RFC | Also, a small number of errata have been reported regarding RFC 4627 | |||
Errata IDs 607 [Err607] and 3607 [Err3607]) and to RFC7159 (see RFC | (see RFC Errata IDs 607 [Err607] and 3607 [Err3607]) and regarding | |||
Errata IDs [Err3915], [Err4264], and [Err4336]). | RFC 7159 (see RFC Errata IDs 3915 [Err3915], 4264 [Err4264], 4336 | |||
[Err4336], and 4388 [Err4388]). | ||||
This document's goal is to apply the errata, remove inconsistencies | This document's goal is to apply the errata, remove inconsistencies | |||
with other specifications of JSON, and highlight practices that can | with other specifications of JSON, and highlight practices that can | |||
lead to interoperability problems. | lead to interoperability problems. | |||
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. | |||
skipping to change at page 5, line 31 | skipping to change at page 5, line 31 | |||
%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 | |||
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 | |||
skipping to change at page 6, line 46 | skipping to change at page 6, line 46 | |||
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 is represented in base 10 using | programming languages. A number is represented in base 10 using | |||
decimal digits. It contains an integer component that may be | decimal digits. It contains an integer component that may be | |||
prefixed with an optional minus sign, which may be followed by a | prefixed with an optional minus sign, which may be followed by a | |||
fraction part and/or an exponent part. Leading zeros are not | fraction part and/or an exponent part. Leading zeros are not | |||
allowed. | 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 lower case, | An exponent part begins with the letter E in uppercase or lowercase, | |||
which may be followed by a plus or minus sign. The E and optional | which may be followed by a plus or minus sign. The E and optional | |||
sign are followed by one or more digits. | sign are followed by one or more digits. | |||
Numeric values that cannot be represented in the grammar below (such | Numeric values that cannot be represented in the grammar below (such | |||
as Infinity and NaN) are not permitted. | as Infinity and NaN) are not permitted. | |||
number = [ minus ] int [ frac ] [ exp ] | number = [ minus ] int [ frac ] [ exp ] | |||
decimal-point = %x2E ; . | decimal-point = %x2E ; . | |||
skipping to change at page 7, line 27 | skipping to change at page 7, line 27 | |||
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 that implements | and precision of numbers accepted. Since software that implements | |||
IEEE 754-2008 binary64 (double precision) numbers [IEEE754] is | IEEE 754 binary64 (double precision) numbers [IEEE754] is generally | |||
generally available and widely used, good interoperability can be | available and widely used, good interoperability can be achieved by | |||
achieved by implementations that expect no more precision or range | implementations that expect no more precision or range than these | |||
than these provide, in the sense that implementations will | provide, in the sense that implementations will approximate JSON | |||
approximate JSON numbers within the expected precision. A JSON | numbers within the expected precision. A JSON number such as 1E400 | |||
number such as 1E400 or 3.141592653589793238462643383279 may indicate | or 3.141592653589793238462643383279 may indicate potential | |||
potential interoperability problems, since it suggests that the | interoperability problems, since it suggests that the software that | |||
software that created it expects receiving software to have greater | created it expects receiving software to have greater capabilities | |||
capabilities for numeric magnitude and precision than is widely | for numeric magnitude and precision than is widely available. | |||
available. | ||||
Note that when such software is used, numbers that are integers and | Note that when such software is used, numbers that 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 | |||
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 | |||
represented as a six-character sequence: a reverse solidus, followed | represented as a six-character sequence: a reverse solidus, followed | |||
by the lowercase letter u, followed by four hexadecimal digits that | by the lowercase letter u, followed by four hexadecimal digits that | |||
encode the character's code point. The hexadecimal letters A though | encode the character's code point. The hexadecimal letters A through | |||
F can be upper or lower case. So, for example, a string containing | F can be uppercase or lowercase. So, for example, a string | |||
only a single reverse solidus character may be represented as | containing only a single reverse solidus character may be represented | |||
"\u005C". | as "\u005C". | |||
Alternatively, there are two-character sequence escape | Alternatively, there are two-character sequence escape | |||
representations of some popular characters. So, for example, a | representations of some popular characters. So, for example, a | |||
string containing only a single reverse solidus character may be | string containing only a single reverse solidus character may be | |||
represented more compactly as "\\". | represented more compactly as "\\". | |||
To escape an extended character that is not in the Basic Multilingual | To escape an extended character that is not in the Basic Multilingual | |||
Plane, the character is represented as a 12-character sequence, | Plane, the character is represented as a 12-character sequence, | |||
encoding the UTF-16 surrogate pair. So, for example, a string | encoding the UTF-16 surrogate pair. So, for example, a string | |||
containing only the G clef character (U+1D11E) may be represented as | containing only the G clef character (U+1D11E) may be represented as | |||
skipping to change at page 8, line 49 | skipping to change at page 8, line 46 | |||
escape = %x5C ; \ | escape = %x5C ; \ | |||
quotation-mark = %x22 ; " | quotation-mark = %x22 ; " | |||
unescaped = %x20-21 / %x23-5B / %x5D-10FFFF | unescaped = %x20-21 / %x23-5B / %x5D-10FFFF | |||
8. String and Character Issues | 8. String and Character Issues | |||
8.1. Character Encoding | 8.1. Character Encoding | |||
When transmitting over a network protocol, or as a payload of a | JSON text exchanged between systems that are not part of a closed | |||
network protocol intended to be interpreted as part of a protocol, | ecosystem MUST be encoded using UTF-8 [RFC3629]. | |||
JSON text MUST be encoded in UTF-8 (Section 3 of [UNICODE]). | ||||
Previous specifications of JSON have not required the use of UTF-8 | Previous specifications of JSON have not required the use of UTF-8 | |||
when transmitting JSON text. However, the vast majority of JSON- | when transmitting JSON text. However, the vast majority of JSON- | |||
based software implementations have chosen to use the UTF-8 encoding, | based software implementations have chosen to use the UTF-8 encoding, | |||
to the extent that it is the only encoding that achieves | to the extent that it is the only encoding that achieves | |||
interoperability. | interoperability. | |||
Implementations MUST NOT add a byte order mark (U+FEFF) to the | Implementations MUST NOT add a byte order mark (U+FEFF) to the | |||
beginning of a networked-transmitted JSON text. In the interests of | beginning of a networked-transmitted JSON text. In the interests of | |||
interoperability, implementations that parse JSON texts MAY ignore | interoperability, implementations that parse JSON texts MAY ignore | |||
skipping to change at page 10, line 18 | skipping to change at page 10, line 14 | |||
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 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: binary | Encoding considerations: binary | |||
Security considerations: See [THIS DOC], Section 12. | Security considerations: See RFC 8259, Section 12 | |||
Interoperability considerations: Described in [THIS DOC] | Interoperability considerations: Described in RFC 8259 | |||
Published specification: [THIS DOC] | Published specification: RFC 8259 | |||
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#, | |||
Clojure, ColdFusion, Common Lisp, E, Erlang, Go, Java, JavaScript, | Clojure, ColdFusion, Common Lisp, E, Erlang, Go, Java, JavaScript, | |||
Lua, Objective CAML, Perl, PHP, Python, Rebol, Ruby, Scala, and | Lua, Objective CAML, Perl, PHP, Python, Rebol, Ruby, Scala, and | |||
Scheme. | Scheme. | |||
Additional information: | Additional information: | |||
Magic number(s): n/a | 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 | IESG | |||
<iesg@ietf.org> | <iesg@ietf.org> | |||
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 | IESG | |||
<iesg@ietf.org> | <iesg@ietf.org> | |||
Note: No "charset" parameter is defined for this registration. | Note: No "charset" parameter is defined for this registration. | |||
Adding one really has no effect on compliant recipients. | Adding one really has no effect on compliant recipients. | |||
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. | |||
skipping to change at page 12, line 41 | skipping to change at page 12, line 38 | |||
] | ] | |||
Here are three small JSON texts containing only values: | Here are three small JSON texts containing only values: | |||
"Hello world!" | "Hello world!" | |||
42 | 42 | |||
true | true | |||
14. Contributors | 14. References | |||
RFC 4627 was written by Douglas Crockford. This document was | ||||
constructed by making a relatively small number of changes to that | ||||
document; thus, the vast majority of the text here is his. | ||||
15. References | 14.1. Normative References | |||
15.1. Normative References | ||||
[ECMA-404] | [ECMA-404] | |||
Ecma International, "The JSON Data Interchange Format", | Ecma International, "The JSON Data Interchange Format", | |||
Standard ECMA-404, October 2013, <http://www.ecma- | Standard ECMA-404, October 2013, <http://www.ecma- | |||
international.org/publications/standards/Ecma-404.htm>. | international.org/publications/standards/Ecma-404.htm>. | |||
[IEEE754] IEEE, "IEEE Standard for Floating-Point Arithmetic", IEEE | [IEEE754] IEEE, "IEEE Standard for Floating-Point Arithmetic", | |||
Standard 754, August 2008, | IEEE 754. | |||
<http://grouper.ieee.org/groups/754/>. | ||||
[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, | Requirement Levels", BCP 14, RFC 2119, | |||
DOI 10.17487/RFC2119, March 1997, | DOI 10.17487/RFC2119, March 1997, | |||
<http://www.rfc-editor.org/info/rfc2119>. | <https://www.rfc-editor.org/info/rfc2119>. | |||
[RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO | ||||
10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November | ||||
2003, <https://www.rfc-editor.org/info/rfc3629>. | ||||
[RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | [RFC5234] Crocker, D., Ed. and P. Overell, "Augmented BNF for Syntax | |||
Specifications: ABNF", STD 68, RFC 5234, | Specifications: ABNF", STD 68, RFC 5234, | |||
DOI 10.17487/RFC5234, January 2008, | DOI 10.17487/RFC5234, January 2008, | |||
<http://www.rfc-editor.org/info/rfc5234>. | <https://www.rfc-editor.org/info/rfc5234>. | |||
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC | ||||
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, | ||||
May 2017, <https://www.rfc-editor.org/info/rfc8174>. | ||||
[UNICODE] The Unicode Consortium, "The Unicode Standard", | [UNICODE] The Unicode Consortium, "The Unicode Standard", | |||
<http://www.unicode.org/versions/latest/>. | <http://www.unicode.org/versions/latest/>. | |||
15.2. Informative References | 14.2. Informative References | |||
[ECMA-262] | [ECMA-262] | |||
Ecma International, "ECMAScript Language Specification, | Ecma International, "ECMAScript Language Specification", | |||
Third Edition", Standard ECMA-262, December 1999, | Standard ECMA-262, Third Edition, December 1999, | |||
<http://www.ecma-international.org/publications/files/ | <http://www.ecma-international.org/publications/files/ | |||
ECMA-ST-ARCH/ | ECMA-ST-ARCH/ | |||
ECMA-262,%203rd%20edition,%20December%201999.pdf>. | ECMA-262,%203rd%20edition,%20December%201999.pdf>. | |||
[Err3607] RFC Errata, "Errata ID 3607", RFC 4627, <https://www.rfc- | [Err3607] RFC Errata, Erratum ID 3607, RFC 4627, | |||
editor.org/errata/eid3607>. | <https://www.rfc-editor.org/errata/eid3607>. | |||
[Err3915] RFC Errata, "Errata ID 7159", RFC 7159, <https://www.rfc- | [Err3915] RFC Errata, Erratum ID 3915, RFC 7159, | |||
editor.org/errata/eid3915>. | <https://www.rfc-editor.org/errata/eid3915>. | |||
[Err4264] RFC Errata, "Errata ID 7159", RFC 7159, <https://www.rfc- | [Err4264] RFC Errata, Erratum ID 4264, RFC 7159, | |||
editor.org/errata/eid4264>. | <https://www.rfc-editor.org/errata/eid4264>. | |||
[Err4336] RFC Errata, "Errata ID 7159", RFC 7159, <https://www.rfc- | [Err4336] RFC Errata, Erratum ID 4336, RFC 7159, | |||
editor.org/errata/eid4336>. | <https://www.rfc-editor.org/errata/eid4336>. | |||
[Err607] RFC Errata, "Errata ID 607", RFC 4627, <https://www.rfc- | [Err4388] RFC Errata, Erratum ID 4388, RFC 7159, | |||
editor.org/errata/eid607>. | <https://www.rfc-editor.org/errata/eid4388>. | |||
[Err607] RFC Errata, Erratum ID 607, RFC 4627, | ||||
<https://www.rfc-editor.org/errata/eid607>. | ||||
[RFC4627] Crockford, D., "The application/json Media Type for | [RFC4627] Crockford, D., "The application/json Media Type for | |||
JavaScript Object Notation (JSON)", RFC 4627, | JavaScript Object Notation (JSON)", RFC 4627, | |||
DOI 10.17487/RFC4627, July 2006, | DOI 10.17487/RFC4627, July 2006, | |||
<http://www.rfc-editor.org/info/rfc4627>. | <https://www.rfc-editor.org/info/rfc4627>. | |||
[RFC7159] Bray, T., Ed., "The JavaScript Object Notation (JSON) Data | ||||
Interchange Format", RFC 7159, DOI 10.17487/RFC7159, March | ||||
2014, <https://www.rfc-editor.org/info/rfc7159>. | ||||
Appendix A. Changes from RFC 7159 | Appendix A. Changes from RFC 7159 | |||
This section lists changes between this document and the text in RFC | This section lists changes between this document and the text in RFC | |||
RFC7159. | 7159. | |||
o Section 1.2 has been updated to reflect the removal of a JSON | o Section 1.2 has been updated to reflect the removal of a JSON | |||
specification from ECMA-262, to make the reference to ECMA-404 | specification from ECMA-262, to make ECMA-404 a normative | |||
normative, and to explain the particular meaning of "normative". | reference, and to explain the particular meaning of "normative". | |||
o Section 1.3 has been updated to reflect errata filed against | o Section 1.3 has been updated to reflect errata filed against RFC | |||
RFC7159, not RFC4627. | 7159, not RFC 4627. | |||
o Section 8.1 was changed to require the use of UTF-8 when | o Section 8.1 was changed to require the use of UTF-8 when | |||
transmitted over a network. | transmitted over a network. | |||
o Section 12 has been updated to increase the precision of the | o Section 12 has been updated to increase the precision of the | |||
description of the security risk that follows from using the | description of the security risk that follows from using the | |||
ECMAScript "eval()" function. | ECMAScript "eval()" function. | |||
o Section 15.1 has been updated to include ECMA 404 as a normative | o Section 14.1 has been updated to include ECMA-404 as a normative | |||
reference. | reference. | |||
o Section 15.2 has been updated to remove ECMA 404, update the | o Section 14.2 has been updated to remove ECMA-404, update the | |||
version of ECMA-262, and refresh the errata list. | version of ECMA-262, and refresh the errata list. | |||
Contributors | ||||
RFC 4627 was written by Douglas Crockford. This document was | ||||
constructed by making a relatively small number of changes to that | ||||
document; thus, the vast majority of the text here is his. | ||||
Author's Address | Author's Address | |||
Tim Bray (editor) | Tim Bray (editor) | |||
Textuality | Textuality | |||
EMail: tbray@textuality.com | Email: tbray@textuality.com | |||
End of changes. 48 change blocks. | ||||
98 lines changed or deleted | 113 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |