RFC7159 7159

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +61 -0
  3. data/.rspec +4 -0
  4. data/.yardopts +2 -0
  5. data/Gemfile +46 -0
  6. data/LICENSE.txt +40 -0
  7. data/README.txt +899 -0
  8. data/RFC7159 +899 -0
  9. data/RFC7159.gemspec +85 -0
  10. data/Rakefile +82 -0
  11. data/lib/RFC7159.rb +80 -0
  12. data/lib/RFC7159/array.rb +134 -0
  13. data/lib/RFC7159/dumper.rb +231 -0
  14. data/lib/RFC7159/false.rb +79 -0
  15. data/lib/RFC7159/null.rb +79 -0
  16. data/lib/RFC7159/number.rb +149 -0
  17. data/lib/RFC7159/object.rb +140 -0
  18. data/lib/RFC7159/parser.ry +267 -0
  19. data/lib/RFC7159/string.rb +221 -0
  20. data/lib/RFC7159/true.rb +79 -0
  21. data/lib/RFC7159/value.rb +96 -0
  22. data/lib/RFC7159/version.rb +48 -0
  23. data/spec/RFC7159_spec.rb +275 -0
  24. data/spec/acceptance/README.txt +66 -0
  25. data/spec/acceptance/invalid/0001-ws/0001-verical-tab.txt +1 -0
  26. data/spec/acceptance/invalid/0001-ws/0002-null.txt +0 -0
  27. data/spec/acceptance/invalid/0001-ws/0003-space-in-number-1.txt +1 -0
  28. data/spec/acceptance/invalid/0001-ws/0004-space-in-number-2.txt +1 -0
  29. data/spec/acceptance/invalid/0001-ws/0005-space-in-number-3.txt +1 -0
  30. data/spec/acceptance/invalid/0001-ws/0006-space-in-number-4.txt +1 -0
  31. data/spec/acceptance/invalid/0001-ws/0007-space-in-number-5.txt +1 -0
  32. data/spec/acceptance/invalid/0001-ws/0008-space-in-number-6.txt +1 -0
  33. data/spec/acceptance/invalid/0001-ws/0009-space-in-literal.txt +1 -0
  34. data/spec/acceptance/invalid/0001-ws/0010-Unicode-LINE_SEPARATOR.txt +1 -0
  35. data/spec/acceptance/invalid/0002-comments/0001-C-style.txt +1 -0
  36. data/spec/acceptance/invalid/0002-comments/0002-C-plusplus-style.txt +2 -0
  37. data/spec/acceptance/invalid/0002-comments/0003-sh-style.txt +2 -0
  38. data/spec/acceptance/invalid/0002-comments/0004-python-docstring.txt +3 -0
  39. data/spec/acceptance/invalid/0002-comments/0005-SQL-style.txt +2 -0
  40. data/spec/acceptance/invalid/0002-comments/0006-BASIC-style.txt +2 -0
  41. data/spec/acceptance/invalid/0003-literals/0001-FALSE.txt +1 -0
  42. data/spec/acceptance/invalid/0003-literals/0002-NULL.txt +1 -0
  43. data/spec/acceptance/invalid/0003-literals/0003-TRUE.txt +1 -0
  44. data/spec/acceptance/invalid/0003-literals/0004-NUL.txt +1 -0
  45. data/spec/acceptance/invalid/0003-literals/0005-nil.txt +1 -0
  46. data/spec/acceptance/invalid/0003-literals/0006-undef.txt +1 -0
  47. data/spec/acceptance/invalid/0003-literals/0007-modifier.txt +1 -0
  48. data/spec/acceptance/invalid/0003-literals/0008-undefined.txt +1 -0
  49. data/spec/acceptance/invalid/0004-numbers/0001-omit-zero.txt +1 -0
  50. data/spec/acceptance/invalid/0004-numbers/0002-minus-dot.txt +1 -0
  51. data/spec/acceptance/invalid/0004-numbers/0003-missing-frac.txt +1 -0
  52. data/spec/acceptance/invalid/0004-numbers/0004-missing-exp.txt +1 -0
  53. data/spec/acceptance/invalid/0004-numbers/0005-octal.txt +1 -0
  54. data/spec/acceptance/invalid/0004-numbers/0006-hexadecimal.txt +1 -0
  55. data/spec/acceptance/invalid/0004-numbers/0007-comma.txt +1 -0
  56. data/spec/acceptance/invalid/0004-numbers/0008-perl-underscore.txt +1 -0
  57. data/spec/acceptance/invalid/0004-numbers/0009-NaN.txt +1 -0
  58. data/spec/acceptance/invalid/0004-numbers/0010-Inf.txt +1 -0
  59. data/spec/acceptance/invalid/0004-numbers/0011-Infinity.txt +1 -0
  60. data/spec/acceptance/invalid/0005-strings/0000-NUL.txt +0 -0
  61. data/spec/acceptance/invalid/0005-strings/0001-not-terminated.txt +1 -0
  62. data/spec/acceptance/invalid/0005-strings/0002-single-quote.txt +1 -0
  63. data/spec/acceptance/invalid/0005-strings/0003-back-quote.txt +1 -0
  64. data/spec/acceptance/invalid/0005-strings/0004-carriage-return.txt +1 -0
  65. data/spec/acceptance/invalid/0005-strings/0005-line-feed.txt +2 -0
  66. data/spec/acceptance/invalid/0005-strings/0006-unknown-escape-a.txt +1 -0
  67. data/spec/acceptance/invalid/0005-strings/0007-unknown-escape-perl-style.txt +1 -0
  68. data/spec/acceptance/invalid/0005-strings/0008-unknown-escape-C-style.txt +1 -0
  69. data/spec/acceptance/invalid/0005-strings/0009-unknown-escape-ruby-style.txt +1 -0
  70. data/spec/acceptance/invalid/0005-strings/0010-escape-too-short.txt +1 -0
  71. data/spec/acceptance/invalid/0005-strings/0011-C-string-concat.txt +1 -0
  72. data/spec/acceptance/invalid/0005-strings/0012-perl-string-concat.txt +1 -0
  73. data/spec/acceptance/invalid/0005-strings/0013-Java-string-concat.txt +1 -0
  74. data/spec/acceptance/invalid/0006-encodings/0001-CESU-8.txt +1 -0
  75. data/spec/acceptance/invalid/0006-encodings/0002-Windows-31J.txt +1 -0
  76. data/spec/acceptance/invalid/0006-encodings/0003-EBCDIC.txt +1 -0
  77. data/spec/acceptance/invalid/0006-encodings/0004-overlong-utf8.txt +1 -0
  78. data/spec/acceptance/invalid/0007-arrays/0001-lacks-open.txt +1 -0
  79. data/spec/acceptance/invalid/0007-arrays/0002-lacks-close.txt +1 -0
  80. data/spec/acceptance/invalid/0007-arrays/0003-interleaving-parens.txt +1 -0
  81. data/spec/acceptance/invalid/0007-arrays/0004-dangling-comma.txt +1 -0
  82. data/spec/acceptance/invalid/0007-arrays/0005-missing-comma.txt +1 -0
  83. data/spec/acceptance/invalid/0007-arrays/0006-colon-instead-of-comma.txt +1 -0
  84. data/spec/acceptance/invalid/0008-hashes/0001-key-missing.txt +1 -0
  85. data/spec/acceptance/invalid/0008-hashes/0002-value-missing.txt +1 -0
  86. data/spec/acceptance/invalid/0008-hashes/0003-true-key.txt +1 -0
  87. data/spec/acceptance/invalid/0008-hashes/0004-false-key.txt +1 -0
  88. data/spec/acceptance/invalid/0008-hashes/0005-null-key.txt +1 -0
  89. data/spec/acceptance/invalid/0008-hashes/0006-numeric-key.txt +1 -0
  90. data/spec/acceptance/invalid/0008-hashes/0007-array-key.txt +1 -0
  91. data/spec/acceptance/invalid/0008-hashes/0008-hash-key.txt +1 -0
  92. data/spec/acceptance/invalid/0008-hashes/0009-key-not-escaped.txt +4 -0
  93. data/spec/acceptance/invalid/0009-javascriptisms/0001-JSONP.txt +1 -0
  94. data/spec/acceptance/invalid/0009-javascriptisms/0002-new-Array.txt +3 -0
  95. data/spec/acceptance/invalid/0009-javascriptisms/0003-new-Date.txt +1 -0
  96. data/spec/acceptance/invalid/0009-javascriptisms/0004-new-Error.txt +1 -0
  97. data/spec/acceptance/invalid/0009-javascriptisms/0005-Math.txt +1 -0
  98. data/spec/acceptance/invalid/0009-javascriptisms/0006-regular-expression.txt +1 -0
  99. data/spec/acceptance/invalid/0009-javascriptisms/0007-function.txt +7 -0
  100. data/spec/acceptance/invalid/0009-javascriptisms/0008-this.txt +1 -0
  101. data/spec/acceptance/invalid/0009-javascriptisms/0009-plusplus.txt +3 -0
  102. data/spec/acceptance/invalid/0009-javascriptisms/0010-ternary-operator.txt +1 -0
  103. data/spec/acceptance/valid/0001-ws/0001-space.json +1 -0
  104. data/spec/acceptance/valid/0001-ws/0002-tab.json +1 -0
  105. data/spec/acceptance/valid/0001-ws/0003-lf.json +1 -0
  106. data/spec/acceptance/valid/0001-ws/0004-cr.json +1 -0
  107. data/spec/acceptance/valid/0001-ws/0005-before.json +1 -0
  108. data/spec/acceptance/valid/0001-ws/0006-after.json +1 -0
  109. data/spec/acceptance/valid/0001-ws/0007-around-comma.json +3 -0
  110. data/spec/acceptance/valid/0001-ws/0008-around-colon.json +3 -0
  111. data/spec/acceptance/valid/0002-bare-values/0001-false.json +1 -0
  112. data/spec/acceptance/valid/0002-bare-values/0002-null.json +1 -0
  113. data/spec/acceptance/valid/0002-bare-values/0003-true.json +1 -0
  114. data/spec/acceptance/valid/0002-bare-values/0004-number.json +1 -0
  115. data/spec/acceptance/valid/0002-bare-values/0005-string.json +1 -0
  116. data/spec/acceptance/valid/0003-literals/0001-false.json +1 -0
  117. data/spec/acceptance/valid/0003-literals/0002-null.json +1 -0
  118. data/spec/acceptance/valid/0003-literals/0003-true.json +1 -0
  119. data/spec/acceptance/valid/0004-numbers/0000-zero.json +1 -0
  120. data/spec/acceptance/valid/0004-numbers/0001-one.json +1 -0
  121. data/spec/acceptance/valid/0004-numbers/0002-two.json +1 -0
  122. data/spec/acceptance/valid/0004-numbers/0003-three.json +1 -0
  123. data/spec/acceptance/valid/0004-numbers/0004-four.json +1 -0
  124. data/spec/acceptance/valid/0004-numbers/0005-five.json +1 -0
  125. data/spec/acceptance/valid/0004-numbers/0006-six.json +1 -0
  126. data/spec/acceptance/valid/0004-numbers/0007-seven.json +1 -0
  127. data/spec/acceptance/valid/0004-numbers/0008-eight.json +1 -0
  128. data/spec/acceptance/valid/0004-numbers/0009-nine.json +1 -0
  129. data/spec/acceptance/valid/0004-numbers/0010-ten.json +1 -0
  130. data/spec/acceptance/valid/0004-numbers/0011-minus.json +1 -0
  131. data/spec/acceptance/valid/0004-numbers/0012-fraction.json +1 -0
  132. data/spec/acceptance/valid/0004-numbers/0013-exponent.json +1 -0
  133. data/spec/acceptance/valid/0004-numbers/0014-exponent-minus.json +1 -0
  134. data/spec/acceptance/valid/0004-numbers/0015-exponent-plus.json +1 -0
  135. data/spec/acceptance/valid/0004-numbers/0016-complex.json +1 -0
  136. data/spec/acceptance/valid/0004-numbers/0017-DBL_MAX.json +1 -0
  137. data/spec/acceptance/valid/0004-numbers/0018-DBL_MIN.json +1 -0
  138. data/spec/acceptance/valid/0004-numbers/0019-subnormal-number.json +1 -0
  139. data/spec/acceptance/valid/0004-numbers/0020-1E400.json +1 -0
  140. data/spec/acceptance/valid/0004-numbers/0021-pi.json +1 -0
  141. data/spec/acceptance/valid/0004-numbers/0022-UINT32_MAX.json +1 -0
  142. data/spec/acceptance/valid/0004-numbers/0023-UINT64_MAX.json +1 -0
  143. data/spec/acceptance/valid/0004-numbers/0024-INT64_MIN.json +1 -0
  144. data/spec/acceptance/valid/0004-numbers/0025-high-resolution-zero.json +1 -0
  145. data/spec/acceptance/valid/0005-strings/0001-empty.json +1 -0
  146. data/spec/acceptance/valid/0005-strings/0002-basic-latin.json +1 -0
  147. data/spec/acceptance/valid/0005-strings/0003-escapes.json +1 -0
  148. data/spec/acceptance/valid/0005-strings/0004-raw-unicode.json +1 -0
  149. data/spec/acceptance/valid/0005-strings/0005-escaped-unicode.json +1 -0
  150. data/spec/acceptance/valid/0005-strings/0006-escaped-NUL.json +1 -0
  151. data/spec/acceptance/valid/0005-strings/0007-escaped-invalid-unicode-still-valid-as-json.json +1 -0
  152. data/spec/acceptance/valid/0005-strings/0008-ruby-json-gem-cant-handle-this.json +1 -0
  153. data/spec/acceptance/valid/0005-strings/0009-unescaped-invalid-javascript-still-valid-as-json.json +1 -0
  154. data/spec/acceptance/valid/0006-m17n/0001-genesis.json +6 -0
  155. data/spec/acceptance/valid/0006-m17n/0002-heart-sutra.json +5 -0
  156. data/spec/acceptance/valid/0006-m17n/0003-escaped-valid-surrogate-pair.json +1 -0
  157. data/spec/acceptance/valid/0006-m17n/0004-unescaped-valid-supplementary-multilingual-plane.json +1 -0
  158. data/spec/acceptance/valid/0007-arrays/0000-empty.json +1 -0
  159. data/spec/acceptance/valid/0007-arrays/0001-one-element.json +1 -0
  160. data/spec/acceptance/valid/0007-arrays/0002-multiple-elements.json +33 -0
  161. data/spec/acceptance/valid/0007-arrays/0003-various-types.json +1 -0
  162. data/spec/acceptance/valid/0007-arrays/0004-nested.json +17 -0
  163. data/spec/acceptance/valid/0008-hashes/0000-empty.json +1 -0
  164. data/spec/acceptance/valid/0008-hashes/0001-onekey.json +1 -0
  165. data/spec/acceptance/valid/0008-hashes/0002-many-keys.json +5 -0
  166. data/spec/acceptance/valid/0008-hashes/0003-empty-key.json +3 -0
  167. data/spec/acceptance/valid/0008-hashes/0004-true-value.json +3 -0
  168. data/spec/acceptance/valid/0008-hashes/0005-false-value.json +3 -0
  169. data/spec/acceptance/valid/0008-hashes/0006-null-value.json +3 -0
  170. data/spec/acceptance/valid/0008-hashes/0007-string-value.json +3 -0
  171. data/spec/acceptance/valid/0008-hashes/0008-numeric-value.json +3 -0
  172. data/spec/acceptance/valid/0008-hashes/0009-array-value.json +8 -0
  173. data/spec/acceptance/valid/0008-hashes/0010-hash-value.json +20 -0
  174. data/spec/acceptance/valid/0008-hashes/0011-duplicate-key-in-different-representations.json +4 -0
  175. data/spec/acceptance/valid/0008-hashes/0011-duplicate-key.json +4 -0
  176. data/spec/spec_helper.rb +54 -0
  177. metadata +520 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a546708c75225b4db3fb99b0c678ce04d6b2ec48
4
+ data.tar.gz: e8277a64f831ae88c0ee31130d7ca8f37f2e041e
5
+ SHA512:
6
+ metadata.gz: b06f6fcba0a88b209c99fdadee07efd31d72215f0317637c767e9d1fdcf27dc7f78891baa8ab83556a3ed8da2d84633de6dbbc7b917295a5c5fea95dc4ff7cc8
7
+ data.tar.gz: e13baa2e82c4a1a10e6a398976f5495e3cf82d16ce3549797ac3cefdc3e5d17425657bf1d7a6bc1189fe3ecde11dfc1c80a3c6e2ff649415265cd2ec47fd44ee
@@ -0,0 +1,61 @@
1
+ # Copyright (c) 2014 Urabe, Shyouhei. All rights reserved.
2
+ #
3
+ # Redistribution and use in source and binary forms, with or without
4
+ # modification, are permitted provided that the following conditions are met:
5
+ #
6
+ # - Redistributions of source code must retain the above copyright
7
+ # notice, this list of conditions and the following disclaimer.
8
+ #
9
+ # - Redistributions in binary form must reproduce the above copyright
10
+ # notice, this list of conditions and the following disclaimer in
11
+ # the documentation and/or other materials provided with the
12
+ # distribution.
13
+ #
14
+ # - Neither the name of Internet Society, IETF or IETF Trust, nor the
15
+ # names of specific contributors, may be used to endorse or promote
16
+ # products derived from this software without specific prior written
17
+ # permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS”
20
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ # POSSIBILITY OF SUCH DAMAGE.
30
+
31
+ *.gem
32
+ *.rbc
33
+ .bundle
34
+ .config
35
+ .rbenv-version
36
+ .ruby-version
37
+ .yardoc
38
+ Gemfile.lock
39
+ InstalledFiles
40
+ _yardoc
41
+ coverage
42
+ doc/
43
+ lib/bundler/man
44
+ lib/RFC7159/parser.rb
45
+ lib/RFC7159/parser.tab.rb
46
+ lib/RFC7159/parser.output
47
+ pkg
48
+ rdoc
49
+ spec/reports
50
+ test/tmp
51
+ test/version_tmp
52
+ tmp
53
+ vendor
54
+
55
+ #
56
+ # Local Variables:
57
+ # mode: conf
58
+ # coding: utf-8-unix
59
+ # fill-column: 79
60
+ # default-justification: full
61
+ # End:
data/.rspec ADDED
@@ -0,0 +1,4 @@
1
+ --color
2
+ --default-path spec
3
+ --fail-fast
4
+ --format doc
@@ -0,0 +1,2 @@
1
+ --readme README.txt
2
+ lib/**/*.rb
data/Gemfile ADDED
@@ -0,0 +1,46 @@
1
+ #! /your/favourite/path/to/bundle
2
+ # -*- coding: utf-8 -*-
3
+
4
+ # Copyright (c) 2014 Urabe, Shyouhei. All rights reserved.
5
+ #
6
+ # Redistribution and use in source and binary forms, with or without
7
+ # modification, are permitted provided that the following conditions are met:
8
+ #
9
+ # - Redistributions of source code must retain the above copyright
10
+ # notice, this list of conditions and the following disclaimer.
11
+ #
12
+ # - Redistributions in binary form must reproduce the above copyright
13
+ # notice, this list of conditions and the following disclaimer in
14
+ # the documentation and/or other materials provided with the
15
+ # distribution.
16
+ #
17
+ # - Neither the name of Internet Society, IETF or IETF Trust, nor the
18
+ # names of specific contributors, may be used to endorse or promote
19
+ # products derived from this software without specific prior written
20
+ # permission.
21
+ #
22
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS”
23
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
24
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
25
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
26
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32
+ # POSSIBILITY OF SUCH DAMAGE.
33
+
34
+ source 'https://rubygems.org'
35
+ gemspec
36
+
37
+ #
38
+ # Local Variables:
39
+ # mode: ruby
40
+ # coding: utf-8-unix
41
+ # indent-tabs-mode: t
42
+ # tab-width: 3
43
+ # ruby-indent-level: 3
44
+ # fill-column: 79
45
+ # default-justification: full
46
+ # End:
@@ -0,0 +1,40 @@
1
+ The file “README.txt” and “RFC7159” (identical contents) is an
2
+ Internet Engineering Task Force (IETF) document and is copied here
3
+ under IETF Trust's Legal Provision (TLP) version 4.0 section 3.c.i:
4
+
5
+ http://trustee.ietf.org/trust-legal-provisions.html
6
+
7
+ All other files are my work, not copied from elsewhere. But to avoid
8
+ conflicts against IETF TLP section 4.e, I hereby put them under
9
+ "Simplified BSD License" that the provision says.
10
+
11
+ Copyright (c) 2014 Urabe, Shyouhei. All rights reserved.
12
+
13
+ Redistribution and use in source and binary forms, with or without
14
+ modification, are permitted provided that the following conditions are
15
+ met:
16
+
17
+ - Redistributions of source code must retain the above copyright
18
+ notice, this list of conditions and the following disclaimer.
19
+
20
+ - Redistributions in binary form must reproduce the above copyright
21
+ notice, this list of conditions and the following disclaimer in
22
+ the documentation and/or other materials provided with the
23
+ distribution.
24
+
25
+ - Neither the name of Internet Society, IETF or IETF Trust, nor the
26
+ names of specific contributors, may be used to endorse or promote
27
+ products derived from this software without specific prior written
28
+ permission.
29
+
30
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
31
+ “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
32
+ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
33
+ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
34
+ OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
35
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
36
+ LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
37
+ DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
38
+ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
39
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
40
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,899 @@
1
+
2
+
3
+
4
+
5
+
6
+
7
+ Internet Engineering Task Force (IETF) T. Bray, Ed.
8
+ Request for Comments: 7159 Google, Inc.
9
+ Obsoletes: 4627, 7158 March 2014
10
+ Category: Standards Track
11
+ ISSN: 2070-1721
12
+
13
+
14
+ The JavaScript Object Notation (JSON) Data Interchange Format
15
+
16
+ Abstract
17
+
18
+ JavaScript Object Notation (JSON) is a lightweight, text-based,
19
+ language-independent data interchange format. It was derived from
20
+ the ECMAScript Programming Language Standard. JSON defines a small
21
+ set of formatting rules for the portable representation of structured
22
+ data.
23
+
24
+ This document removes inconsistencies with other specifications of
25
+ JSON, repairs specification errors, and offers experience-based
26
+ interoperability guidance.
27
+
28
+ Status of This Memo
29
+
30
+ This is an Internet Standards Track document.
31
+
32
+ This document is a product of the Internet Engineering Task Force
33
+ (IETF). It represents the consensus of the IETF community. It has
34
+ received public review and has been approved for publication by the
35
+ Internet Engineering Steering Group (IESG). Further information on
36
+ Internet Standards is available in Section 2 of RFC 5741.
37
+
38
+ Information about the current status of this document, any errata,
39
+ and how to provide feedback on it may be obtained at
40
+ http://www.rfc-editor.org/info/rfc7159.
41
+
42
+
43
+
44
+
45
+
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+
56
+
57
+
58
+ Bray Standards Track [Page 1]
59
+
60
+ RFC 7159 JSON March 2014
61
+
62
+
63
+ Copyright Notice
64
+
65
+ Copyright (c) 2014 IETF Trust and the persons identified as the
66
+ document authors. All rights reserved.
67
+
68
+ This document is subject to BCP 78 and the IETF Trust's Legal
69
+ Provisions Relating to IETF Documents
70
+ (http://trustee.ietf.org/license-info) in effect on the date of
71
+ publication of this document. Please review these documents
72
+ carefully, as they describe your rights and restrictions with respect
73
+ to this document. Code Components extracted from this document must
74
+ include Simplified BSD License text as described in Section 4.e of
75
+ the Trust Legal Provisions and are provided without warranty as
76
+ described in the Simplified BSD License.
77
+
78
+ This document may contain material from IETF Documents or IETF
79
+ Contributions published or made publicly available before November
80
+ 10, 2008. The person(s) controlling the copyright in some of this
81
+ material may not have granted the IETF Trust the right to allow
82
+ modifications of such material outside the IETF Standards Process.
83
+ Without obtaining an adequate license from the person(s) controlling
84
+ the copyright in such materials, this document may not be modified
85
+ outside the IETF Standards Process, and derivative works of it may
86
+ not be created outside the IETF Standards Process, except to format
87
+ it for publication as an RFC or to translate it into languages other
88
+ than English.
89
+
90
+
91
+
92
+
93
+
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+ Bray Standards Track [Page 2]
115
+
116
+ RFC 7159 JSON March 2014
117
+
118
+
119
+ Table of Contents
120
+
121
+ 1. Introduction ....................................................3
122
+ 1.1. Conventions Used in This Document ..........................4
123
+ 1.2. Specifications of JSON .....................................4
124
+ 1.3. Introduction to This Revision ..............................4
125
+ 2. JSON Grammar ....................................................4
126
+ 3. Values ..........................................................5
127
+ 4. Objects .........................................................6
128
+ 5. Arrays ..........................................................6
129
+ 6. Numbers .........................................................6
130
+ 7. Strings .........................................................8
131
+ 8. String and Character Issues .....................................9
132
+ 8.1. Character Encoding .........................................9
133
+ 8.2. Unicode Characters .........................................9
134
+ 8.3. String Comparison ..........................................9
135
+ 9. Parsers ........................................................10
136
+ 10. Generators ....................................................10
137
+ 11. IANA Considerations ...........................................10
138
+ 12. Security Considerations .......................................11
139
+ 13. Examples ......................................................12
140
+ 14. Contributors ..................................................13
141
+ 15. References ....................................................13
142
+ 15.1. Normative References .....................................13
143
+ 15.2. Informative References ...................................13
144
+ Appendix A. Changes from RFC 4627 .................................15
145
+
146
+ 1. Introduction
147
+
148
+ JavaScript Object Notation (JSON) is a text format for the
149
+ serialization of structured data. It is derived from the object
150
+ literals of JavaScript, as defined in the ECMAScript Programming
151
+ Language Standard, Third Edition [ECMA-262].
152
+
153
+ JSON can represent four primitive types (strings, numbers, booleans,
154
+ and null) and two structured types (objects and arrays).
155
+
156
+ A string is a sequence of zero or more Unicode characters [UNICODE].
157
+ Note that this citation references the latest version of Unicode
158
+ rather than a specific release. It is not expected that future
159
+ changes in the UNICODE specification will impact the syntax of JSON.
160
+
161
+ An object is an unordered collection of zero or more name/value
162
+ pairs, where a name is a string and a value is a string, number,
163
+ boolean, null, object, or array.
164
+
165
+ An array is an ordered sequence of zero or more values.
166
+
167
+
168
+
169
+
170
+ Bray Standards Track [Page 3]
171
+
172
+ RFC 7159 JSON March 2014
173
+
174
+
175
+ The terms "object" and "array" come from the conventions of
176
+ JavaScript.
177
+
178
+ JSON's design goals were for it to be minimal, portable, textual, and
179
+ a subset of JavaScript.
180
+
181
+ 1.1. Conventions Used in This Document
182
+
183
+ The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
184
+ "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
185
+ document are to be interpreted as described in [RFC2119].
186
+
187
+ The grammatical rules in this document are to be interpreted as
188
+ described in [RFC5234].
189
+
190
+ 1.2. Specifications of JSON
191
+
192
+ This document updates [RFC4627], which describes JSON and registers
193
+ the media type "application/json".
194
+
195
+ A description of JSON in ECMAScript terms appears in Version 5.1 of
196
+ the ECMAScript specification [ECMA-262], Section 15.12. JSON is also
197
+ described in [ECMA-404].
198
+
199
+ All of the specifications of JSON syntax agree on the syntactic
200
+ elements of the language.
201
+
202
+ 1.3. Introduction to This Revision
203
+
204
+ In the years since the publication of RFC 4627, JSON has found very
205
+ wide use. This experience has revealed certain patterns, which,
206
+ while allowed by its specifications, have caused interoperability
207
+ problems.
208
+
209
+ Also, a small number of errata have been reported (see RFC Errata IDs
210
+ 607 [Err607] and 3607 [Err3607]).
211
+
212
+ This document's goal is to apply the errata, remove inconsistencies
213
+ with other specifications of JSON, and highlight practices that can
214
+ lead to interoperability problems.
215
+
216
+ 2. JSON Grammar
217
+
218
+ A JSON text is a sequence of tokens. The set of tokens includes six
219
+ structural characters, strings, numbers, and three literal names.
220
+
221
+ A JSON text is a serialized value. Note that certain previous
222
+ specifications of JSON constrained a JSON text to be an object or an
223
+
224
+
225
+
226
+ Bray Standards Track [Page 4]
227
+
228
+ RFC 7159 JSON March 2014
229
+
230
+
231
+ array. Implementations that generate only objects or arrays where a
232
+ JSON text is called for will be interoperable in the sense that all
233
+ implementations will accept these as conforming JSON texts.
234
+
235
+ JSON-text = ws value ws
236
+
237
+ These are the six structural characters:
238
+
239
+ begin-array = ws %x5B ws ; [ left square bracket
240
+
241
+ begin-object = ws %x7B ws ; { left curly bracket
242
+
243
+ end-array = ws %x5D ws ; ] right square bracket
244
+
245
+ end-object = ws %x7D ws ; } right curly bracket
246
+
247
+ name-separator = ws %x3A ws ; : colon
248
+
249
+ value-separator = ws %x2C ws ; , comma
250
+
251
+ Insignificant whitespace is allowed before or after any of the six
252
+ structural characters.
253
+
254
+ ws = *(
255
+ %x20 / ; Space
256
+ %x09 / ; Horizontal tab
257
+ %x0A / ; Line feed or New line
258
+ %x0D ) ; Carriage return
259
+
260
+ 3. Values
261
+
262
+ A JSON value MUST be an object, array, number, or string, or one of
263
+ the following three literal names:
264
+
265
+ false null true
266
+
267
+ The literal names MUST be lowercase. No other literal names are
268
+ allowed.
269
+
270
+ value = false / null / true / object / array / number / string
271
+
272
+ false = %x66.61.6c.73.65 ; false
273
+
274
+ null = %x6e.75.6c.6c ; null
275
+
276
+ true = %x74.72.75.65 ; true
277
+
278
+
279
+
280
+
281
+
282
+ Bray Standards Track [Page 5]
283
+
284
+ RFC 7159 JSON March 2014
285
+
286
+
287
+ 4. Objects
288
+
289
+ An object structure is represented as a pair of curly brackets
290
+ surrounding zero or more name/value pairs (or members). A name is a
291
+ string. A single colon comes after each name, separating the name
292
+ from the value. A single comma separates a value from a following
293
+ name. The names within an object SHOULD be unique.
294
+
295
+ object = begin-object [ member *( value-separator member ) ]
296
+ end-object
297
+
298
+ member = string name-separator value
299
+
300
+ An object whose names are all unique is interoperable in the sense
301
+ that all software implementations receiving that object will agree on
302
+ the name-value mappings. When the names within an object are not
303
+ unique, the behavior of software that receives such an object is
304
+ unpredictable. Many implementations report the last name/value pair
305
+ only. Other implementations report an error or fail to parse the
306
+ object, and some implementations report all of the name/value pairs,
307
+ including duplicates.
308
+
309
+ JSON parsing libraries have been observed to differ as to whether or
310
+ not they make the ordering of object members visible to calling
311
+ software. Implementations whose behavior does not depend on member
312
+ ordering will be interoperable in the sense that they will not be
313
+ affected by these differences.
314
+
315
+ 5. Arrays
316
+
317
+ An array structure is represented as square brackets surrounding zero
318
+ or more values (or elements). Elements are separated by commas.
319
+
320
+ array = begin-array [ value *( value-separator value ) ] end-array
321
+
322
+ There is no requirement that the values in an array be of the same
323
+ type.
324
+
325
+ 6. Numbers
326
+
327
+ The representation of numbers is similar to that used in most
328
+ programming languages. A number is represented in base 10 using
329
+ decimal digits. It contains an integer component that may be
330
+ prefixed with an optional minus sign, which may be followed by a
331
+ fraction part and/or an exponent part. Leading zeros are not
332
+ allowed.
333
+
334
+ A fraction part is a decimal point followed by one or more digits.
335
+
336
+
337
+
338
+ Bray Standards Track [Page 6]
339
+
340
+ RFC 7159 JSON March 2014
341
+
342
+
343
+ An exponent part begins with the letter E in upper or lower case,
344
+ which may be followed by a plus or minus sign. The E and optional
345
+ sign are followed by one or more digits.
346
+
347
+ Numeric values that cannot be represented in the grammar below (such
348
+ as Infinity and NaN) are not permitted.
349
+
350
+ number = [ minus ] int [ frac ] [ exp ]
351
+
352
+ decimal-point = %x2E ; .
353
+
354
+ digit1-9 = %x31-39 ; 1-9
355
+
356
+ e = %x65 / %x45 ; e E
357
+
358
+ exp = e [ minus / plus ] 1*DIGIT
359
+
360
+ frac = decimal-point 1*DIGIT
361
+
362
+ int = zero / ( digit1-9 *DIGIT )
363
+
364
+ minus = %x2D ; -
365
+
366
+ plus = %x2B ; +
367
+
368
+ zero = %x30 ; 0
369
+
370
+ This specification allows implementations to set limits on the range
371
+ and precision of numbers accepted. Since software that implements
372
+ IEEE 754-2008 binary64 (double precision) numbers [IEEE754] is
373
+ generally available and widely used, good interoperability can be
374
+ achieved by implementations that expect no more precision or range
375
+ than these provide, in the sense that implementations will
376
+ approximate JSON numbers within the expected precision. A JSON
377
+ number such as 1E400 or 3.141592653589793238462643383279 may indicate
378
+ potential interoperability problems, since it suggests that the
379
+ software that created it expects receiving software to have greater
380
+ capabilities for numeric magnitude and precision than is widely
381
+ available.
382
+
383
+ Note that when such software is used, numbers that are integers and
384
+ are in the range [-(2**53)+1, (2**53)-1] are interoperable in the
385
+ sense that implementations will agree exactly on their numeric
386
+ values.
387
+
388
+
389
+
390
+
391
+
392
+
393
+
394
+ Bray Standards Track [Page 7]
395
+
396
+ RFC 7159 JSON March 2014
397
+
398
+
399
+ 7. Strings
400
+
401
+ The representation of strings is similar to conventions used in the C
402
+ family of programming languages. A string begins and ends with
403
+ quotation marks. All Unicode characters may be placed within the
404
+ quotation marks, except for the characters that must be escaped:
405
+ quotation mark, reverse solidus, and the control characters (U+0000
406
+ through U+001F).
407
+
408
+ Any character may be escaped. If the character is in the Basic
409
+ Multilingual Plane (U+0000 through U+FFFF), then it may be
410
+ represented as a six-character sequence: a reverse solidus, followed
411
+ by the lowercase letter u, followed by four hexadecimal digits that
412
+ encode the character's code point. The hexadecimal letters A though
413
+ F can be upper or lower case. So, for example, a string containing
414
+ only a single reverse solidus character may be represented as
415
+ "\u005C".
416
+
417
+ Alternatively, there are two-character sequence escape
418
+ representations of some popular characters. So, for example, a
419
+ string containing only a single reverse solidus character may be
420
+ represented more compactly as "\\".
421
+
422
+ To escape an extended character that is not in the Basic Multilingual
423
+ Plane, the character is represented as a 12-character sequence,
424
+ encoding the UTF-16 surrogate pair. So, for example, a string
425
+ containing only the G clef character (U+1D11E) may be represented as
426
+ "\uD834\uDD1E".
427
+
428
+ string = quotation-mark *char quotation-mark
429
+
430
+ char = unescaped /
431
+ escape (
432
+ %x22 / ; " quotation mark U+0022
433
+ %x5C / ; \ reverse solidus U+005C
434
+ %x2F / ; / solidus U+002F
435
+ %x62 / ; b backspace U+0008
436
+ %x66 / ; f form feed U+000C
437
+ %x6E / ; n line feed U+000A
438
+ %x72 / ; r carriage return U+000D
439
+ %x74 / ; t tab U+0009
440
+ %x75 4HEXDIG ) ; uXXXX U+XXXX
441
+
442
+ escape = %x5C ; \
443
+
444
+ quotation-mark = %x22 ; "
445
+
446
+ unescaped = %x20-21 / %x23-5B / %x5D-10FFFF
447
+
448
+
449
+
450
+ Bray Standards Track [Page 8]
451
+
452
+ RFC 7159 JSON March 2014
453
+
454
+
455
+ 8. String and Character Issues
456
+
457
+ 8.1. Character Encoding
458
+
459
+ JSON text SHALL be encoded in UTF-8, UTF-16, or UTF-32. The default
460
+ encoding is UTF-8, and JSON texts that are encoded in UTF-8 are
461
+ interoperable in the sense that they will be read successfully by the
462
+ maximum number of implementations; there are many implementations
463
+ that cannot successfully read texts in other encodings (such as
464
+ UTF-16 and UTF-32).
465
+
466
+ Implementations MUST NOT add a byte order mark to the beginning of a
467
+ JSON text. In the interests of interoperability, implementations
468
+ that parse JSON texts MAY ignore the presence of a byte order mark
469
+ rather than treating it as an error.
470
+
471
+ 8.2. Unicode Characters
472
+
473
+ When all the strings represented in a JSON text are composed entirely
474
+ of Unicode characters [UNICODE] (however escaped), then that JSON
475
+ text is interoperable in the sense that all software implementations
476
+ that parse it will agree on the contents of names and of string
477
+ values in objects and arrays.
478
+
479
+ However, the ABNF in this specification allows member names and
480
+ string values to contain bit sequences that cannot encode Unicode
481
+ characters; for example, "\uDEAD" (a single unpaired UTF-16
482
+ surrogate). Instances of this have been observed, for example, when
483
+ a library truncates a UTF-16 string without checking whether the
484
+ truncation split a surrogate pair. The behavior of software that
485
+ receives JSON texts containing such values is unpredictable; for
486
+ example, implementations might return different values for the length
487
+ of a string value or even suffer fatal runtime exceptions.
488
+
489
+ 8.3. String Comparison
490
+
491
+ Software implementations are typically required to test names of
492
+ object members for equality. Implementations that transform the
493
+ textual representation into sequences of Unicode code units and then
494
+ perform the comparison numerically, code unit by code unit, are
495
+ interoperable in the sense that implementations will agree in all
496
+ cases on equality or inequality of two strings. For example,
497
+ implementations that compare strings with escaped characters
498
+ unconverted may incorrectly find that "a\\b" and "a\u005Cb" are not
499
+ equal.
500
+
501
+
502
+
503
+
504
+
505
+
506
+ Bray Standards Track [Page 9]
507
+
508
+ RFC 7159 JSON March 2014
509
+
510
+
511
+ 9. Parsers
512
+
513
+ A JSON parser transforms a JSON text into another representation. A
514
+ JSON parser MUST accept all texts that conform to the JSON grammar.
515
+ A JSON parser MAY accept non-JSON forms or extensions.
516
+
517
+ An implementation may set limits on the size of texts that it
518
+ accepts. An implementation may set limits on the maximum depth of
519
+ nesting. An implementation may set limits on the range and precision
520
+ of numbers. An implementation may set limits on the length and
521
+ character contents of strings.
522
+
523
+ 10. Generators
524
+
525
+ A JSON generator produces JSON text. The resulting text MUST
526
+ strictly conform to the JSON grammar.
527
+
528
+ 11. IANA Considerations
529
+
530
+ The MIME media type for JSON text is application/json.
531
+
532
+ Type name: application
533
+
534
+ Subtype name: json
535
+
536
+ Required parameters: n/a
537
+
538
+ Optional parameters: n/a
539
+
540
+ Encoding considerations: binary
541
+
542
+ Security considerations: See [RFC7159], Section 12.
543
+
544
+ Interoperability considerations: Described in [RFC7159]
545
+
546
+ Published specification: [RFC7159]
547
+
548
+ Applications that use this media type:
549
+ JSON has been used to exchange data between applications written
550
+ in all of these programming languages: ActionScript, C, C#,
551
+ Clojure, ColdFusion, Common Lisp, E, Erlang, Go, Java, JavaScript,
552
+ Lua, Objective CAML, Perl, PHP, Python, Rebol, Ruby, Scala, and
553
+ Scheme.
554
+
555
+
556
+
557
+
558
+
559
+
560
+
561
+
562
+ Bray Standards Track [Page 10]
563
+
564
+ RFC 7159 JSON March 2014
565
+
566
+
567
+ Additional information:
568
+ Magic number(s): n/a
569
+ File extension(s): .json
570
+ Macintosh file type code(s): TEXT
571
+
572
+ Person & email address to contact for further information:
573
+ IESG
574
+ <iesg@ietf.org>
575
+
576
+ Intended usage: COMMON
577
+
578
+ Restrictions on usage: none
579
+
580
+ Author:
581
+ Douglas Crockford
582
+ <douglas@crockford.com>
583
+
584
+ Change controller:
585
+ IESG
586
+ <iesg@ietf.org>
587
+
588
+ Note: No "charset" parameter is defined for this registration.
589
+ Adding one really has no effect on compliant recipients.
590
+
591
+ 12. Security Considerations
592
+
593
+ Generally, there are security issues with scripting languages. JSON
594
+ is a subset of JavaScript but excludes assignment and invocation.
595
+
596
+ Since JSON's syntax is borrowed from JavaScript, it is possible to
597
+ use that language's "eval()" function to parse JSON texts. This
598
+ generally constitutes an unacceptable security risk, since the text
599
+ could contain executable code along with data declarations. The same
600
+ consideration applies to the use of eval()-like functions in any
601
+ other programming language in which JSON texts conform to that
602
+ language's syntax.
603
+
604
+
605
+
606
+
607
+
608
+
609
+
610
+
611
+
612
+
613
+
614
+
615
+
616
+
617
+
618
+ Bray Standards Track [Page 11]
619
+
620
+ RFC 7159 JSON March 2014
621
+
622
+
623
+ 13. Examples
624
+
625
+ This is a JSON object:
626
+
627
+ {
628
+ "Image": {
629
+ "Width": 800,
630
+ "Height": 600,
631
+ "Title": "View from 15th Floor",
632
+ "Thumbnail": {
633
+ "Url": "http://www.example.com/image/481989943",
634
+ "Height": 125,
635
+ "Width": 100
636
+ },
637
+ "Animated" : false,
638
+ "IDs": [116, 943, 234, 38793]
639
+ }
640
+ }
641
+
642
+ Its Image member is an object whose Thumbnail member is an object and
643
+ whose IDs member is an array of numbers.
644
+
645
+ This is a JSON array containing two objects:
646
+
647
+ [
648
+ {
649
+ "precision": "zip",
650
+ "Latitude": 37.7668,
651
+ "Longitude": -122.3959,
652
+ "Address": "",
653
+ "City": "SAN FRANCISCO",
654
+ "State": "CA",
655
+ "Zip": "94107",
656
+ "Country": "US"
657
+ },
658
+ {
659
+ "precision": "zip",
660
+ "Latitude": 37.371991,
661
+ "Longitude": -122.026020,
662
+ "Address": "",
663
+ "City": "SUNNYVALE",
664
+ "State": "CA",
665
+ "Zip": "94085",
666
+ "Country": "US"
667
+ }
668
+ ]
669
+
670
+
671
+
672
+
673
+
674
+ Bray Standards Track [Page 12]
675
+
676
+ RFC 7159 JSON March 2014
677
+
678
+
679
+ Here are three small JSON texts containing only values:
680
+
681
+ "Hello world!"
682
+
683
+ 42
684
+
685
+ true
686
+
687
+ 14. Contributors
688
+
689
+ RFC 4627 was written by Douglas Crockford. This document was
690
+ constructed by making a relatively small number of changes to that
691
+ document; thus, the vast majority of the text here is his.
692
+
693
+ 15. References
694
+
695
+ 15.1. Normative References
696
+
697
+ [IEEE754] IEEE, "IEEE Standard for Floating-Point Arithmetic", IEEE
698
+ Standard 754, August 2008,
699
+ <http://grouper.ieee.org/groups/754/>.
700
+
701
+ [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
702
+ Requirement Levels", BCP 14, RFC 2119, March 1997.
703
+
704
+ [RFC5234] Crocker, D. and P. Overell, "Augmented BNF for Syntax
705
+ Specifications: ABNF", STD 68, RFC 5234, January 2008.
706
+
707
+ [UNICODE] The Unicode Consortium, "The Unicode Standard",
708
+ <http://www.unicode.org/versions/latest/>.
709
+
710
+ 15.2. Informative References
711
+
712
+ [ECMA-262] Ecma International, "ECMAScript Language Specification
713
+ Edition 5.1", Standard ECMA-262, June 2011,
714
+ <http://www.ecma-international.org/publications/standards/
715
+ Ecma-262.htm>.
716
+
717
+ [ECMA-404] Ecma International, "The JSON Data Interchange Format",
718
+ Standard ECMA-404, October 2013,
719
+ <http://www.ecma-international.org/publications/standards/
720
+ Ecma-404.htm>.
721
+
722
+ [Err3607] RFC Errata, Errata ID 3607, RFC 3607,
723
+ <http://www.rfc-editor.org>.
724
+
725
+
726
+
727
+
728
+
729
+
730
+ Bray Standards Track [Page 13]
731
+
732
+ RFC 7159 JSON March 2014
733
+
734
+
735
+ [Err607] RFC Errata, Errata ID 607, RFC 607,
736
+ <http://www.rfc-editor.org>.
737
+
738
+ [RFC4627] Crockford, D., "The application/json Media Type for
739
+ JavaScript Object Notation (JSON)", RFC 4627, July 2006.
740
+
741
+
742
+
743
+
744
+
745
+
746
+
747
+
748
+
749
+
750
+
751
+
752
+
753
+
754
+
755
+
756
+
757
+
758
+
759
+
760
+
761
+
762
+
763
+
764
+
765
+
766
+
767
+
768
+
769
+
770
+
771
+
772
+
773
+
774
+
775
+
776
+
777
+
778
+
779
+
780
+
781
+
782
+
783
+
784
+
785
+
786
+ Bray Standards Track [Page 14]
787
+
788
+ RFC 7159 JSON March 2014
789
+
790
+
791
+ Appendix A. Changes from RFC 4627
792
+
793
+ This section lists changes between this document and the text in RFC
794
+ 4627.
795
+
796
+ o Changed the title and abstract of the document.
797
+
798
+ o Changed the reference to [UNICODE] to be not version specific.
799
+
800
+ o Added a "Specifications of JSON" section.
801
+
802
+ o Added an "Introduction to This Revision" section.
803
+
804
+ o Changed the definition of "JSON text" so that it can be any JSON
805
+ value, removing the constraint that it be an object or array.
806
+
807
+ o Added language about duplicate object member names, member
808
+ ordering, and interoperability.
809
+
810
+ o Clarified the absence of a requirement that values in an array be
811
+ of the same JSON type.
812
+
813
+ o Applied erratum #607 from RFC 4627 to correctly align the artwork
814
+ for the definition of "object".
815
+
816
+ o Changed "as sequences of digits" to "in the grammar below" in the
817
+ "Numbers" section, and made base-10-ness explicit.
818
+
819
+ o Added language about number interoperability as a function of
820
+ IEEE754, and added an IEEE754 reference.
821
+
822
+ o Added language about interoperability and Unicode characters and
823
+ about string comparisons. To do this, turned the old "Encoding"
824
+ section into a "String and Character Issues" section, with three
825
+ subsections: "Character Encoding", "Unicode Characters", and
826
+ "String Comparison".
827
+
828
+ o Changed guidance in the "Parsers" section to point out that
829
+ implementations may set limits on the range "and precision" of
830
+ numbers.
831
+
832
+ o Updated and tidied the "IANA Considerations" section.
833
+
834
+ o Made a real "Security Considerations" section and lifted the text
835
+ out of the previous "IANA Considerations" section.
836
+
837
+
838
+
839
+
840
+
841
+
842
+ Bray Standards Track [Page 15]
843
+
844
+ RFC 7159 JSON March 2014
845
+
846
+
847
+ o Applied erratum #3607 from RFC 4627 by removing the security
848
+ consideration that begins "A JSON text can be safely passed" and
849
+ the JavaScript code that went with that consideration.
850
+
851
+ o Added a note to the "Security Considerations" section pointing out
852
+ the risks of using the "eval()" function in JavaScript or any
853
+ other language in which JSON texts conform to that language's
854
+ syntax.
855
+
856
+ o Added a note to the "IANA Considerations" clarifying the absence
857
+ of a "charset" parameter for the application/json media type.
858
+
859
+ o Changed "100" to 100 and added a boolean field, both in the first
860
+ example.
861
+
862
+ o Added examples of JSON texts with simple values, neither objects
863
+ nor arrays.
864
+
865
+ o Added a "Contributors" section crediting Douglas Crockford.
866
+
867
+ o Added a reference to RFC 4627.
868
+
869
+ o Moved the ECMAScript reference from Normative to Informative and
870
+ updated it to reference ECMAScript 5.1, and added a reference to
871
+ ECMA 404.
872
+
873
+ Author's Address
874
+
875
+ Tim Bray (editor)
876
+ Google, Inc.
877
+
878
+ EMail: tbray@textuality.com
879
+
880
+
881
+
882
+
883
+
884
+
885
+
886
+
887
+
888
+
889
+
890
+
891
+
892
+
893
+
894
+
895
+
896
+
897
+
898
+ Bray Standards Track [Page 16]
899
+