Anum Sheraz
Anum Sheraz

Reputation: 2625

Deserialize JSON string into array of list

I've a string

var my_str="[(0,10),(1,15),(2,48),(3,63),(4,25),(5,95),(6,41),(7,31),(8,5),(15,2)]";

I need to convert it into an array of list. For example,

alert(my_str[1])

would give an output of 1,15.

I've tried the following:

var myarray = JSON.parse(my_str);

but it throws the error "unexpected token ( in JSON at position 1"

Upvotes: 2

Views: 4104

Answers (5)

Andrea Di Lisio
Andrea Di Lisio

Reputation: 475

The problem is that you are using a strange sintax for delimiting inner objects. It would be appropriate to use "[" and "]" instead of "(" and ")". Anyway you can easily replace them with javascript and make your structure an array of arrays of strings. Sounds a bit creepy, but this way you can create a licit JSON object and benefit of JS native methods.

var my_array = JSON.parse(my_str.replace(/\(/g,'[').replace(/\)/g,']'))

you can now work on my_array object and retrieve couples of numbers using array indexes

my_array[1] ---> 1,15

Upvotes: 1

jisoo shin
jisoo shin

Reputation: 540

var arr = my_str.split("),(")
arr[0] = arr[0].slice(2);
arr[arr.length-1] = arr[arr.length-1].slice(0,-2)

Upvotes: 0

Davin Tryon
Davin Tryon

Reputation: 67296

This is a pretty naive idea, but does work (without JSON.parse or eval):

var arr = my_str.replace('[(', '').replace(')]', '').split('),(');

//> ["0,10", "1,15", "2,48", "3,63", "4,25", "5,95", "6,41", "7,31", "8,5", "15,2"]

Upvotes: 0

Abdennour TOUMI
Abdennour TOUMI

Reputation: 93163

You have to replace ( by '( and ) by )' ,, then , apply eval :

eval(arr.replace(/(/g,'\'(').replace(/)/g,')\''));
//> ["(0,10)", "(1,15)", "(2,48)", "(3,63)", "(4,25)", "(5,95)", "(6,41)", "(7,31)", "(8,5)", "(15,2)"]

Upvotes: 0

Anum Sheraz
Anum Sheraz

Reputation: 2625

I tried this

var myarray = JSON.parse(my_str); 

but it throws error "unexpected token ( in JSON at position 1"

So I changed the structure of my string to:

var my_str="[[0,10],[1,15],[2,48],[3,63],[4,25],[5,95],[6,41],[7,31],[8,5],[15,2]]";

That worked like a charm ;)

Upvotes: 2

Related Questions