Errata

Verified (5)

RFC 8259 inline-errata

Source of RFC: jsonbis (art)

Errata-ID: 7383

Status:
Verified
Type:
Technical
Reported By:
Daniel Tegründe
Date Reported:
2023-03-12
Verified by:
Andy Newton
Date Verified:
2026-05-28

Section 3. Values says:

false = %x66.61.6c.73.65   ; false

      null  = %x6e.75.6c.6c      ; null

It should say:

false = %x66.61.6C.73.65   ; false

      null  = %x6E.75.6C.6C      ; null

Notes:

Hex values should be capitalized https://www.rfc-editor.org/rfc/rfc5234#appendix-B.1

Errata-ID: 7600

Status:
Verified
Type:
Technical
Reported By:
Guillaume Fortin-Debigaré
Date Reported:
2023-08-11
Verified by:
Andy Newton
Date Verified:
2026-05-28

Section 6 says:

The representation of numbers is similar to that used in most
   programming languages.  A number is represented in base 10 using
   decimal digits.  It contains an integer component that may be
   prefixed with an optional minus sign, which may be followed by a
   fraction part and/or an exponent part.  Leading zeros are not
   allowed.

It should say:

The representation of numbers is similar to that used in most
   programming languages.  A number is represented in base 10 using
   decimal digits.  It contains an integer component that may be
   prefixed with an optional minus sign, which may be followed by a
   fraction part and/or an exponent part.  Leading zeros in the
   integer component beyond the units digit are not allowed.

Notes:

The original wording about leading zeros contradicts the documented ABNF grammar for JSON numbers in the following cases:
- If the integer component is equal to 0 and the fractional component exists. (Examples: 0.1, 0.001)
- In the exponent part, after the letter E or e or the optional sign. (Example: 1E01)

Errata-ID: 7603

Status:
Verified
Type:
Technical
Reported By:
Guillaume Fortin-Debigaré
Date Reported:
2023-08-13
Verified by:
Andy Newton
Date Verified:
2026-05-28

Section 1 says:

A string is a sequence of zero or more Unicode characters [UNICODE].

It should say:

A string is a sequence of zero or more Unicode code points [UNICODE].

Notes:

Surrogate code points are not Unicode characters, as explained here: https://www.unicode.org/glossary/#surrogate_character

However, a surrogate code point outside of a surrogate pair is allowed in JSON strings both in escaped and unescaped forms according to the ABNF grammar in section 7 and the warning in section 8.2, despite an UTF-8 incompatibility for the unescaped form. In addition, the original text contradicts ECMA-404 section 9, which states: "A string is a sequence of Unicode code points wrapped with quotation marks (U+0022). All code points may be placed within the quotation marks except for the code points that must be escaped: quotation mark (U+0022), reverse solidus (U+005C), and the control characters U+0000 to U+001F. "

Errata-ID: 5210

Status:
Verified
Type:
Editorial
Reported By:
Julian Reschke
Date Reported:
2017-12-16
Verified by:
Andy Newton
Date Verified:
2026-05-28

Throughout the document, when it says:

Internet Engineering Task Force (IETF)                      T. Bray, Ed.
Request for Comments: 8259                                    Textuality
Obsoletes: 7159                                            December 2017
Category: Standards Track
ISSN: 2070-1721

It should say:

Internet Engineering Task Force (IETF)                      T. Bray, Ed.
Request for Comments: 8259                                    Textuality
STD: 90                                                    December 2017
Obsoletes: 7159
Category: Standards Track
ISSN: 2070-1721

Notes:

Missing "STD" entry in boilerplate.

Errata-ID: 5318

Status:
Verified
Type:
Editorial
Reported By:
Joakim Erdfelt
Date Reported:
2018-04-04
Verified by:
Andy Newton
Date Verified:
2026-05-28

Section 7 says:

string = quotation-mark *char quotation-mark

      char = unescaped /
          escape (
              %x22 /          ; "    quotation mark  U+0022
              %x5C /          ; \    reverse solidus U+005C
              %x2F /          ; /    solidus         U+002F
              %x62 /          ; b    backspace       U+0008
              %x66 /          ; f    form feed       U+000C
              %x6E /          ; n    line feed       U+000A
              %x72 /          ; r    carriage return U+000D
              %x74 /          ; t    tab             U+0009
              %x75 4HEXDIG )  ; uXXXX                U+XXXX

      escape = %x5C              ; \

      quotation-mark = %x22      ; "

      unescaped = %x20-21 / %x23-5B / %x5D-10FFFF

It should say:

string = quotation-mark *char quotation-mark

      char = unescaped /
          escape (
              %x22 /          ; "    quotation mark  U+0022
              %x5C /          ; \    reverse solidus U+005C
              %x2F /          ; /    solidus         U+002F
              %x62 /          ; b    backspace       U+0008
              %x66 /          ; f    form feed       U+000C
              %x6E /          ; n    line feed       U+000A
              %x72 /          ; r    carriage return U+000D
              %x74 /          ; t    tab             U+0009
              %x75 4HEXDIG )  ; uXXXX                U+XXXX

      escape = %x5C              ; \

      quotation-mark = %x22      ; "

      unescaped = %x20-21 / %x23-2E / %x30-5B / %x5D-10FFFF

Notes:

The solidus U+002F is listed as being escaped above, but is not excluded in the 'unescaped' sequence.

Reported (1)

RFC 8259 inline-errata

Source of RFC: jsonbis (art)

Errata-ID: 9095

Status:
Reported
Type:
Technical
Reported By:
Bernhard E. Reiter
Date Reported:
2026-08-06

Section 11 says:

<iesg@ietf.org>

Note:  No "charset" parameter is defined for this registration.
      Adding one really has no effect on compliant recipients.

It should say:

<iesg@ietf.org>

Notes:

The first sentence of the note first repeats and 
with the second sentence contradicts the statement made a few lines earlier
in the section: `Optional parameters:  n/a` that there are no media type parameters allowed.

Disallowing the "charset" parameter is in line with the change from RFC7159 
that `Section 8.1 was changed to require the use of UTF-8 when transmitted over a network.` 
The "no effect" statement in the note was understandable for the obsolete standards 
where other encodings were allowed. 
But the rationale for it in RFC8259 is not obvious nor given. 
As argument to the contrary: Security aware applications over the last years increasingly implement 
strict whitelisting of allowed variations. Seeing a charset parameter where non is allowed will not pass
by a strictly whitelisting, compliant recipient implementation. 
And thus it will have a negative effect on those compliant recipients - which makes the note wrong. 
(If the WG would have wished for interoperability with the old standards at this point, it would
have allowed "charset"  as optional and then added a note that only "utf-8" is compatible with this RFC.)
(This errata report has some similarities with Errata-ID: 5853 but is different in that it suggests to
fully remove the wrong note.)

Suggestion: remove the wrong note (and the then superfluous repetition)

Held for Document Update (2)

RFC 8259 inline-errata

Source of RFC: jsonbis (art)

Errata-ID: 7650

Status:
Held for Document Update
Type:
Technical
Reported By:
Lucas Tesson
Date Reported:
2023-09-20
Held for Document Update by:
Andy Newton
Date Held for Document Update:
2026-05-28

Section 7 says:

string = quotation-mark *char quotation-mark

      char = unescaped /
          escape (
              %x22 /          ; "    quotation mark  U+0022
              %x5C /          ; \    reverse solidus U+005C
              %x2F /          ; /    solidus         U+002F
              %x62 /          ; b    backspace       U+0008
              %x66 /          ; f    form feed       U+000C
              %x6E /          ; n    line feed       U+000A
              %x72 /          ; r    carriage return U+000D
              %x74 /          ; t    tab             U+0009
              %x75 4HEXDIG )  ; uXXXX                U+XXXX

It should say:

string = quotation-mark *json-char quotation-mark

      json-char = unescaped /
          escape (
              %x22 /          ; "    quotation mark  U+0022
              %x5C /          ; \    reverse solidus U+005C
              %x2F /          ; /    solidus         U+002F
              %x62 /          ; b    backspace       U+0008
              %x66 /          ; f    form feed       U+000C
              %x6E /          ; n    line feed       U+000A
              %x72 /          ; r    carriage return U+000D
              %x74 /          ; t    tab             U+0009
              %x75 4HEXDIG )  ; uXXXX                U+XXXX

Notes:

RFC 5234 Section 2.1 "Rule Naming" notes that "rule names are case insensitive". It is explained that literal text strings enclosed in quotation marks are case insensitive, and have later been clarified by RFC 7405.
In RFC 5234 Appendix B, Section B.1 "Core Rules", the rule "CHAR" is already defined such that it constitutes the core of ABNF, thus no grammar can use those names regarding the previous explanation.

The goal of this errata is to propose an alternative for the "char" rule such that RFC 8259 can provide a valid grammar regarding the ABNF RFCs.

Errata-ID: 8438

Status:
Held for Document Update
Type:
Editorial
Reported By:
vitya-ne
Date Reported:
2025-05-28
Held for Document Update by:
Andy Newton
Date Held for Document Update:
2025-05-29

Section 14.1 says:

14.1.  Normative References

   [ECMA-404] Ecma International, "The JSON Data Interchange Format",
              Standard ECMA-404,
              <http://www.ecma-international.org/publications/
              standards/Ecma-404.htm>.

It should say:

14.1.  Normative References

   [ECMA-404] Ecma International, "The JSON Data Interchange Format",
              Standard ECMA-404,
              <https://ecma-international.org/publications-and-standards/
              standards/ecma-404/>.

Notes:

Link to ECMA-404 should be updated

Rejected (8)

RFC 8259 inline-errata

Source of RFC: jsonbis (art)

Errata-ID: 5218

Status:
Rejected
Type:
Technical
Reported By:
Vasiliy Faronov
Date Reported:
2017-12-28
Rejected by:
Andy Newton
Date Rejected:
2026-05-28

Section 12 says:

JSON is a subset of JavaScript

It should say:

JSON is nearly a subset of JavaScript

Notes:

JSON is not a subset of JavaScript: there are syntactically valid JSON texts that are not syntactically valid JavaScript. Namely, JSON strings can contain unescaped U+2028 LINE SEPARATOR or U+2029 PARAGRAPH SEPARATOR characters, while JavaScript string literals cannot. Thus, a sequence of characters U+0022 U+2028 U+0022 matches this RFC's 'string' production, but does not match ECMA-262's 'Expression' production.

Errata-ID: 5853

Status:
Rejected
Type:
Technical
Reported By:
Luca BRUNO
Date Reported:
2019-09-05
Rejected by:
Andy Newton
Date Rejected:
2026-05-28

Section 11 says:

Note:  No "charset" parameter is defined for this registration.
    Adding one really has no effect on compliant recipients.

It should say:

Note:  No "charset" parameter is defined for this registration.
    JSON text is encoded as described in RFC 8259, Section 8.1.

Notes:

Last sentence of last note of section 11 should be amended, as it introduces confusion by going against other explicit statements, like the followings:
 * RFC8259 sect. 8.1 defines that inner encoding is UTF-8
 * RFC8259 sect. 11 defines no formal (optional/required) parameters for this registered type
 * RFC6838 sect. 4.2.1 defines the common usage of a "charset" parameter as a "required" one (which isn't the case here)
 * RFC6838 sect. 4.2.1 defines that "charset" should not be used if the inner payload already transports charset information (e.g. mandatory UTF-8, which is the case here)
 * RFC6838 sect. 4.2.1 defines a "charset" parameter only for subtypes of the "text/*" hierarchy (which isn't the case here)

Errata-ID: 6208

Status:
Rejected
Type:
Technical
Reported By:
David Golden
Date Reported:
2020-06-10
Rejected by:
Barry Leiba
Date Rejected:
2020-06-10

Section 8.1 says:

In the interests of interoperability, implementations that parse JSON texts MAY ignore the presence of a byte order mark rather than treating it as an error.

It should say:

In the interests of interoperability, implementations that parse JSON texts MAY ignore the presence of a byte order mark or MAY interpret a byte order mark to indicate an alternate encoding rather than treating it as an error.

Notes:

The original line is copied from previous RFCs that specifically allowed alternate encodings.  In the context of a new, UTF-8 only restriction, interoperability provisions should also address interpreting legacy formats that predate the restriction.  By omission, readers may conclude that the *only* option for a BOM is to ignore or error.
 --VERIFIER NOTES-- 
   This is asking to revisit what we have consensus on, not a report of an error in the RFC.
The working group had extensive discussions on BOMs, and chose this particular working purposefully.

Errata-ID: 7307

Status:
Rejected
Type:
Technical
Reported By:
Maxim Iurie
Date Reported:
2023-01-13
Rejected by:
Francesca Palombini
Date Rejected:
2023-01-18

Section 3 says:

      null  = %x6e.75.6c.6c      ; null 

It should say:

      null  = %x6e.75.6c.6c      ; null without quotation marks for numeric attributes and "null" for string attributes.

Notes:

It is not clear how to encode null values in JSON.
Some are encoding all attributes as "null".
Some are encoding all attributes as null without quotation marks
Some are encoding string attributes as "null" and numeric attributes as null without quotation marks.
https://json.org is mentioning "null". ECMA 262  is mentioning "null" for string and +0F for numeric attributes. However providing zero for a number instead of null is incorrect and provides wrong results (in BI).
 --VERIFIER NOTES-- 
The original specification is clear as such, and this errata would make a change that breaks the format, and is against the original intent of the text.

Errata-ID: 7617

Status:
Rejected
Type:
Technical
Reported By:
Guillaume Fortin-Debigaré
Date Reported:
2023-08-25
Rejected by:
Andy Newton
Date Rejected:
2026-05-28

Section 6 says:

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
   sense that implementations will agree exactly on their numeric
   values.

It should say:

Note that when such software parses numbers as rational numbers in
   decimal or scientific notation, they are interoperable in the sense
   that implementations will agree exactly on their numeric values. In
   particular, when such software is used, numbers that are integers and
   are in the range [-(2**53)+1, (2**53)-1] are interoperable in that
   sense.

Notes:

IEEE 754 does not consider negative zero and positive zero to be the same numeric value, even though it considers them equal. Despite this, JavaScript serializes negative zero as the JSON text "0", which contradicts the original text.

My suggested correction mentions "rational numbers in decimal or scientific notation" since it's never explicitly mentioned in the document how a number should be interpreted when parsed to maximize interoperability. This version addresses that concern at the same time.

Errata-ID: 7673

Status:
Rejected
Type:
Technical
Reported By:
Zachary Collier (Zamicol)
Date Reported:
2023-10-11
Rejected by:
Andy Newton
Date Rejected:
2026-05-28

Section 7 says:

The representation of strings is similar to conventions used in the C family
of programming languages.  A string begins and ends with quotation marks. All
Unicode characters may be placed within the quotation marks, except for the
characters that MUST be escaped: quotation mark, reverse solidus, and the
control characters (U+0000 through U+001F).

It should say:

The representation of strings is similar to conventions used in the C family
of programming languages.  A string begins and ends with quotation marks.  All
Unicode characters may be placed within the quotation marks, except for the
characters that MUST be escaped: quotation mark, reverse solidus, and the
control characters (U+0000 through U+001F, U+007F, and U+0080 through
U+009F).

Notes:

There are 33 7-bit control characters, but the JSON RFC only listed 32 by
omitting the inclusion of the last control character in the 7-bit ASCII range,
'del.'  However, JSON is not limited to 7-bit ASCII; it is Unicode.  Unicode
encompasses 65 control characters from U+0080 to U+009F, totaling an additional
32 characters.  The section that currently reads "U+0000 through U+001F" should
include these additional control characters reading as "U+0000 through U+001F,
U+007F, and U+0080 through U+009F"

Errata-ID: 8622

Status:
Rejected
Type:
Technical
Reported By:
Fótyék Róbert
Date Reported:
2025-10-31
Rejected by:
Andy Newton
Date Rejected:
2025-11-01

Section 4 says:

...The names within an object SHOULD be unique.

It should say:

Unknown, this contradicts the ECMA-404 specification.

Notes:

In both the ECMA-404 and the RFC 8259 specifications, it is stated that both descriptions should be considered equal. However, in RFC 8259 it is stated that names in an object should be unique, whereas in ECMA-404 it says in section 6 : "The JSON syntax does not impose any restrictions on
the strings used as names, does not require that name strings be unique..."

This seems to expose a contradiction between the two, expectedly equal specifications.
 --VERIFIER NOTES-- 
 Consensus is to reject.

see https://mailarchive.ietf.org/arch/msg/json/reBGZ98FYQeyvfi-bWkFtzJPrdk/

Errata-ID: 8874

Status:
Rejected
Type:
Technical
Reported By:
Scott Morgan
Date Reported:
2026-04-09
Rejected by:
Andrew Newton
Date Rejected:
2026-04-13

Section 6 says:

6.  Numbers

   The representation of numbers is similar to that used in most
   programming languages.  A number is represented in base 10 using
   decimal digits.  It contains an integer component that may be
   prefixed with an optional minus sign, which may be followed by a
   fraction part and/or an exponent part.  Leading zeros are not
   allowed.

   A fraction part is a decimal point followed by one or more digits.

   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
   sign are followed by one or more digits.

   Numeric values that cannot be represented in the grammar below (such
   as Infinity and NaN) are not permitted.

      number = [ minus ] int [ frac ] [ exp ]

      decimal-point = %x2E       ; .

      digit1-9 = %x31-39         ; 1-9

      e = %x65 / %x45            ; e E

      exp = e [ minus / plus ] 1*DIGIT

      frac = decimal-point 1*DIGIT

      int = zero / ( digit1-9 *DIGIT )

      minus = %x2D               ; -

      plus = %x2B                ; +

      zero = %x30                ; 0

   This specification allows implementations to set limits on the range
   and precision of numbers accepted.  Since software that implements
   IEEE 754 binary64 (double precision) numbers [IEEE754] is generally
   available and widely used, good interoperability can be achieved by
   implementations that expect no more precision or range than these
   provide, in the sense that implementations will approximate JSON
   numbers within the expected precision.  A JSON number such as 1E400
   or 3.141592653589793238462643383279 may indicate potential
   interoperability problems, since it suggests that the software that
   created it expects receiving software to have greater capabilities
   for numeric magnitude and precision than is widely available.

   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
   sense that implementations will agree exactly on their numeric
   values.

It should say:

...
TODO something like
https://github.com/adligo/ten10b_v1.adligo.org
also see
https://www.ietf.org/archive/id/draft-morgan-ten64-00.html#commentary
...

Notes:

Since JSON is based on ECMAScript now, it should be explicit in how ECMAScript's (decimal) numbers are serialized and deserialized.  It should include which algorithms should be used, when, and why.  It should be exceedingly specific about rounding, if and when rounding should ever be used!  Without being explicit, various implementations will not be able to communicate apples to apples.
 --VERIFIER NOTES-- 
 JSON is not based on ECMAScript.

See email thread: https://mailarchive.ietf.org/arch/msg/json/gucVG-EN3b2XJsKBsOJBU_6-LLI/
Report New Erratum