{
  "generatedAt": "2026-08-17T01:48:24.055Z",
  "environment": {
    "node": "v26.7.0",
    "python": "3.14.6",
    "jq": "1.7.1-apple",
    "jqAvailable": true,
    "json5": "2.2.3",
    "jsoncParser": "3.3.1",
    "os": "Darwin 25.5.0",
    "machine": "Apple M5 Pro"
  },
  "cases": [
    {
      "id": "object-trailing",
      "description": "Trailing comma after the last member of an object",
      "input": "{\"a\": 1, \"b\": 2,}",
      "parsers": {
        "V8 (Node.js v26.7.0) JSON.parse": {
          "accepted": false,
          "message": "Expected double-quoted property name in JSON at position 16 (line 1 column 17)",
          "position": {
            "offset": 16,
            "line": 1,
            "column": 17
          }
        },
        "Python 3.14.6 json.loads": {
          "accepted": false,
          "message": "Illegal trailing comma before end of object: line 1 column 16 (char 15)",
          "position": {
            "line": 1,
            "column": 16,
            "offset": 15
          }
        },
        "jq jq-1.7.1-apple": {
          "accepted": false,
          "message": "jq: parse error: Expected another key-value pair at line 1, column 17",
          "position": {
            "line": 1,
            "column": 17,
            "offset": null
          }
        },
        "json5 2.2.3": {
          "accepted": true,
          "message": null,
          "position": null
        },
        "jsonc-parser 3.3.1": {
          "accepted": false,
          "message": "PropertyNameExpected at offset 16; ValueExpected at offset 16",
          "position": {
            "offset": 16,
            "line": null,
            "column": null
          },
          "errors": [
            {
              "error": "PropertyNameExpected",
              "offset": 16,
              "length": 1
            },
            {
              "error": "ValueExpected",
              "offset": 16,
              "length": 1
            }
          ]
        }
      }
    },
    {
      "id": "array-trailing",
      "description": "Trailing comma after the last element of an array",
      "input": "[1, 2, 3,]",
      "parsers": {
        "V8 (Node.js v26.7.0) JSON.parse": {
          "accepted": false,
          "message": "Unexpected token ']', \"[1, 2, 3,]\" is not valid JSON",
          "position": null
        },
        "Python 3.14.6 json.loads": {
          "accepted": false,
          "message": "Illegal trailing comma before end of array: line 1 column 9 (char 8)",
          "position": {
            "line": 1,
            "column": 9,
            "offset": 8
          }
        },
        "jq jq-1.7.1-apple": {
          "accepted": false,
          "message": "jq: parse error: Expected another array element at line 1, column 10",
          "position": {
            "line": 1,
            "column": 10,
            "offset": null
          }
        },
        "json5 2.2.3": {
          "accepted": true,
          "message": null,
          "position": null
        },
        "jsonc-parser 3.3.1": {
          "accepted": false,
          "message": "ValueExpected at offset 9",
          "position": {
            "offset": 9,
            "line": null,
            "column": null
          },
          "errors": [
            {
              "error": "ValueExpected",
              "offset": 9,
              "length": 1
            }
          ]
        }
      }
    },
    {
      "id": "nested-trailing",
      "description": "Trailing comma inside a nested array, valid comma at the outer level",
      "input": "{\"a\": [1, 2,], \"b\": 3}",
      "parsers": {
        "V8 (Node.js v26.7.0) JSON.parse": {
          "accepted": false,
          "message": "Unexpected token ']', ...\"a\": [1, 2,], \"b\": 3}\" is not valid JSON",
          "position": null
        },
        "Python 3.14.6 json.loads": {
          "accepted": false,
          "message": "Illegal trailing comma before end of array: line 1 column 12 (char 11)",
          "position": {
            "line": 1,
            "column": 12,
            "offset": 11
          }
        },
        "jq jq-1.7.1-apple": {
          "accepted": false,
          "message": "jq: parse error: Expected another array element at line 1, column 13",
          "position": {
            "line": 1,
            "column": 13,
            "offset": null
          }
        },
        "json5 2.2.3": {
          "accepted": true,
          "message": null,
          "position": null
        },
        "jsonc-parser 3.3.1": {
          "accepted": false,
          "message": "ValueExpected at offset 12",
          "position": {
            "offset": 12,
            "line": null,
            "column": null
          },
          "errors": [
            {
              "error": "ValueExpected",
              "offset": 12,
              "length": 1
            }
          ]
        }
      }
    },
    {
      "id": "multiline-object-trailing",
      "description": "Trailing comma after the last property in a multi-line object, so line numbers are meaningful",
      "input": "{\n  \"a\": 1,\n  \"b\": 2,\n}",
      "parsers": {
        "V8 (Node.js v26.7.0) JSON.parse": {
          "accepted": false,
          "message": "Expected double-quoted property name in JSON at position 22 (line 4 column 1)",
          "position": {
            "offset": 22,
            "line": 4,
            "column": 1
          }
        },
        "Python 3.14.6 json.loads": {
          "accepted": false,
          "message": "Illegal trailing comma before end of object: line 3 column 9 (char 20)",
          "position": {
            "line": 3,
            "column": 9,
            "offset": 20
          }
        },
        "jq jq-1.7.1-apple": {
          "accepted": false,
          "message": "jq: parse error: Expected another key-value pair at line 4, column 1",
          "position": {
            "line": 4,
            "column": 1,
            "offset": null
          }
        },
        "json5 2.2.3": {
          "accepted": true,
          "message": null,
          "position": null
        },
        "jsonc-parser 3.3.1": {
          "accepted": false,
          "message": "PropertyNameExpected at offset 22; ValueExpected at offset 22",
          "position": {
            "offset": 22,
            "line": null,
            "column": null
          },
          "errors": [
            {
              "error": "PropertyNameExpected",
              "offset": 22,
              "length": 1
            },
            {
              "error": "ValueExpected",
              "offset": 22,
              "length": 1
            }
          ]
        }
      }
    },
    {
      "id": "double-trailing",
      "description": "Two consecutive commas before the closing bracket",
      "input": "[1, 2,,]",
      "parsers": {
        "V8 (Node.js v26.7.0) JSON.parse": {
          "accepted": false,
          "message": "Unexpected token ',', \"[1, 2,,]\" is not valid JSON",
          "position": null
        },
        "Python 3.14.6 json.loads": {
          "accepted": false,
          "message": "Expecting value: line 1 column 7 (char 6)",
          "position": {
            "line": 1,
            "column": 7,
            "offset": 6
          }
        },
        "jq jq-1.7.1-apple": {
          "accepted": false,
          "message": "jq: parse error: Expected value before ',' at line 1, column 7",
          "position": {
            "line": 1,
            "column": 7,
            "offset": null
          }
        },
        "json5 2.2.3": {
          "accepted": false,
          "message": "JSON5: invalid character ',' at 1:7",
          "position": {
            "line": 1,
            "column": 7,
            "offset": null
          }
        },
        "jsonc-parser 3.3.1": {
          "accepted": false,
          "message": "ValueExpected at offset 6; ValueExpected at offset 7",
          "position": {
            "offset": 6,
            "line": null,
            "column": null
          },
          "errors": [
            {
              "error": "ValueExpected",
              "offset": 6,
              "length": 1
            },
            {
              "error": "ValueExpected",
              "offset": 7,
              "length": 1
            }
          ]
        }
      }
    },
    {
      "id": "valid-baseline",
      "description": "No trailing comma — negative control that every parser must accept",
      "input": "{\"a\": 1, \"b\": 2}",
      "parsers": {
        "V8 (Node.js v26.7.0) JSON.parse": {
          "accepted": true,
          "message": null,
          "position": null
        },
        "Python 3.14.6 json.loads": {
          "accepted": true,
          "message": null,
          "position": null
        },
        "jq jq-1.7.1-apple": {
          "accepted": true,
          "message": null,
          "position": null
        },
        "json5 2.2.3": {
          "accepted": true,
          "message": null,
          "position": null
        },
        "jsonc-parser 3.3.1": {
          "accepted": true,
          "message": null,
          "position": null
        }
      }
    }
  ]
}
