将JSON字符串反序列化为列表数组

时间:2016-08-27 22:18:10

标签: javascript arrays json string deserialization

我有一个字符串

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

我需要将其转换为列表数组。例如,

alert(my_str[1])

会输出1,15。

我尝试了以下内容:

var myarray = JSON.parse(my_str);

但它会抛出错误“意外令牌(在位置1的JSON中”

5 个答案:

答案 0 :(得分:1)

我试过这个

var myarray = JSON.parse(my_str); 

但它会抛出错误“意外令牌(在位置1的JSON中”

所以我将字符串的结构更改为:

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

这就像一个魅力;)

答案 1 :(得分:1)

问题是你使用一个奇怪的sintax来分隔内部对象。使用“[”和“]”而不是“(”和“)”是合适的。 无论如何,您可以使用javascript轻松替换它们,并使您的结构成为字符串数组的数组。听起来有点令人毛骨悚然,但这样你就可以创建一个合法的JSON对象并从JS本机方法中受益。

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

您现在可以处理 my_array 对象并使用数组索引检索数组对象

my_array[1] ---> 1,15

答案 2 :(得分:0)

您必须将(替换为'(而将)替换为)' ,,然后,应用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)"]

答案 3 :(得分:0)

这是一个非常幼稚的想法,但确实有效(没有JSON.parseeval):

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"]

答案 4 :(得分:0)

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