Home > Software engineering >  JSON returned from Response.json() appears to be invalid?
JSON returned from Response.json() appears to be invalid?

Time:01-10

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().

CodePudding user response:

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)

CodePudding user response:

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

  • Related