Skip to content

U+2028 and U+2029 maybe should be treat as line ending characters for line comments #23

@chirsz-ever

Description

@chirsz-ever

Current statement of JSONC:

  • Line ending: Refers to the sequence of (often invisible) control characters that indicate the end of a line. In JSONC, this sequence can be represented by a line feed (LF) or a carriage return followed by a line feed (CRLF). In terms of Unicode, LF corresponds to U+000A and CR corresponds to U+000D.

Single-line comments start with // and continue until a line ending is encountered.

But ECMA-262 treat U+2028 and U+2029 as line terminators. They can be used to end line comments.

Under the current definition, the following represents { "a": 1, "b": 2 } as JavaScript, but {"b": 2} as JSONC.

{
    // U+2028 here -> 
"a": 1,
    "b": 2
}

And the following is valid JSONC, but not a valid JavaScript object literal:

{
    // U+2028 here -> 
xxx
    "b": 2
}

A similar issue is that JSON allows U+2028 and U+2029 characters to be directly included in string literals, but JavaScript did not. Therefore, JSON was not a subset of JavaScript until ES2019 made it so.

The solutions adopted by other similar standards:

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions