SefaUn
SefaUn

Reputation: 1220

String Can't Json in Javascript

I have a like this object as a string. if that object like this below, no problem

var txt = '{ "title": "001188", "name": "Input 1", "data": "false" }'
var arr = [];
var obj = JSON.parse(txt);
arr.push(obj)
document.getElementById("demo").innerHTML = arr[0].name;

but if I try to convert this object, there was an error

var txt = '{ "title": "001188", "name": "Input 1", "data": "false" }, { "title": "001188", "name": "Input 2", "data": "false" }, { "title": "001188", "name": "Input 3", "data": "false" }, { "title": "001188", "name": "Input 4", "data": "false" }, { "title": "001188", "name": "Input 5", "data": "false" }'
var arr = [];

var obj = JSON.parse(txt);
arr.push(obj)
document.getElementById("demo").innerHTML = arr[0].name;

Error is below

Unexpected token , in JSON at position 57

How can I do this. Thanks

Upvotes: 0

Views: 65

Answers (3)

shotgun02
shotgun02

Reputation: 784

{...} is used to define a single object, while the other [...] is used to define a sequence of either objects, values or lists ...

objects are defined as such {key:object or list or value , ...} list are nothing more than a sequence of either objects or lists or values, [objects or list or values, ... ]...

[{'value':1}, {'values':[1,2,3,3, {'a':'a', 'b':'b'}]}, 2, 3, 4]

Just enclose you array of json objects in [...]

var txt = '[{ "title": "001188", "name": "Input 1", "data": "false" }, { "title": "001188", "name": "Input 2", "data": "false" }, { "title": "001188", "name": "Input 3", "data": "false" }, { "title": "001188", "name": "Input 4", "data": "false" }, { "title": "001188", "name": "Input 5", "data": "false" }]'
var arr = [];

var obj = JSON.parse(txt);

arr.push(obj)

document.getElementById("demo").innerHTML = arr[0].name;

reference from an old question on stackoverflow

Upvotes: 0

N3R4ZZuRR0
N3R4ZZuRR0

Reputation: 2412

That's because your JSON is invalid. The objects in your JSON have to be in an array. Something like this:

[{ "title": "001188", "name": "Input 1", "data": "false" }, { "title": "001188", "name": "Input 2", "data": "false" }, { "title": "001188", "name": "Input 3", "data": "false" }, { "title": "001188", "name": "Input 4", "data": "false" }, { "title": "001188", "name": "Input 5", "data": "false" }]

instead of

{ "title": "001188", "name": "Input 1", "data": "false" }, { "title": "001188", "name": "Input 2", "data": "false" }, { "title": "001188", "name": "Input 3", "data": "false" }, { "title": "001188", "name": "Input 4", "data": "false" }, { "title": "001188", "name": "Input 5", "data": "false" }

And then parse your JSON. Also, you don't have to push the parsed result into an array as it will create a 2D array unnecessarily.

var txt = '[{ "title": "001188", "name": "Input 1", "data": "false" }, { "title": "001188", "name": "Input 2", "data": "false" }, { "title": "001188", "name": "Input 3", "data": "false" }, { "title": "001188", "name": "Input 4", "data": "false" }, { "title": "001188", "name": "Input 5", "data": "false" }]'

var arr = JSON.parse(txt);
console.log(arr[0].name);

Upvotes: 2

G. Juwot
G. Juwot

Reputation: 191

var txt = '[{ "title": "001188", "name": "Input 1", "data": "false" }, { "title": "001188", "name": "Input 2", "data": "false" }, { "title": "001188", "name": "Input 3", "data": "false" }, { "title": "001188", "name": "Input 4", "data": "false" }, { "title": "001188", "name": "Input 5", "data": "false" }]'
var arr = [];

var obj = JSON.parse(txt);
arr.push(obj)
document.getElementById("demo").innerHTML = arr[0].name;

Can you try this? The [ ] were missing it seems.

Upvotes: 0

Related Questions