skip to Main Content

Checking the JSON output of my application on https://jsonlint.com/ indicates that the JSON is invalid… But I cannot fathom how it’s invalid.

The JSON in question:

{
    records: [{
        id: 70,
        whse: '00',
        partNo: '100E',
        description: '1" EMT CONDUIT (BUNDLE QTY. 1000FT)',
    }],
    start: 0,
    limit: 10,
    count: 1
}

I’ve tried changing the type of quotes used to no avail. The error returned doesn’t really help me at all either:

Error: Parse error on line 1:
{   records: [{     id: 70
--^
Expecting 'STRING', '}', got 'undefined'

As far as I can tell, it’s valid JSON. This JSON is being returned from a Response.json() function call after a successful fetch().

2

Answers


  1. You were right to think of the quotes as a potential source of problem.

    That’s a valid JavaScript Object yes. Meaning a JS interpreter will successfully understand it if you were to do:

    const variable = {
        records: [{
            id: 70,
            whse: '00',
            partNo: '100E',
            description: '1" EMT CONDUIT (BUNDLE QTY. 1000FT)',
        }],
        start: 0,
        limit: 10,
        count: 1
    };
    

    but that’s not a valid JSON string. if you want valid JSON string, you’d need to stringify it like this:

    JSON.stringify({
        records: [{
            id: 70,
            whse: '00',
            partNo: '100E',
            description: '1" EMT CONDUIT (BUNDLE QTY. 1000FT)',
        }],
        start: 0,
        limit: 10,
        count: 1
    });
    

    and the result would be the string:

    {
      "records": [
        {
          "id": 70,
          "whse": "00",
          "partNo": "100E",
          "description": "1" EMT CONDUIT (BUNDLE QTY. 1000FT)"
        }
      ],
      "start": 0,
      "limit": 10,
      "count": 1
    }
    

    (notice the double quotes around key names)

    Login or Signup to reply.
  2. That is because raw JSON expects string or ints as property, however, for a javascript JSON its a valid syntax. There are several things that jsonlint didnt liked, in order to fix this you must

    • Add double quotes for each property
    • Change to double quotes for each string value
    • Remove the last comma of the object

    And you will get something like this:

    {
        "records": [{
            "id": 70,
            "whse": "00",
            "partNo": "100E",
            "description": "1" EMT CONDUIT (BUNDLE QTY. 1000FT)"
        }],
        "start": 0,
        "limit": 10,
        "count": 1
    }

    Also, take into consideration that since you have double quotes inside a string you have to use the backslash to escape the character

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search