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