将字符串转换为嵌套数组

时间:2017-07-18 13:46:01

标签: javascript string-conversion

我有一个从服务器传递的字符串,用AJAX调用,我必须将字符串转换为嵌套数组,用于填充PDF。

例如:

var tableData = "[{ name: 'Bartek', age: 34 },{ name: 'John', age: 27 },{ name:'Elizabeth', age: 30 }]";

我需要在JavaScript中转换为数组,如下所示:

var newTableData = [
    { name: 'Bartek', age: 34 },
    { name: 'John', age: 27 },
    { name: 'Elizabeth', age: 30 }
];

我该怎么做?

3 个答案:

答案 0 :(得分:2)

正如评论中所指出的,最好的解决方案是从服务器返回valid JSON并使用JSON.parse解析它。
您可以使用https://jsonlint.com/JSV等工具来检查您的JSON是否有效。

如果由于某些“真实世界问题”,您的服务器不是JSON投诉,您可以使用像dirty-json这样的脏解析器或编写自己的JSON parse

dirty-json不需要引用对象键,并且可以处理单引号值字符串。

var dJSON = require('dirty-json');
dJSON.parse("{ test: 'this is a test'}").then(function (r) {
    console.log(JSON.stringify(r));
});

// output: {"test":"this is a test"}

在技术上可行并且最容易实施的最后手段可能是最糟糕的选择,因为它是dangers。但它可以开箱即用:eval

eval(tableData);
// [ { name: 'Bartek', age: 34 },
//   { name: 'John', age: 27 },
//   { name: 'Elizabeth', age: 30 } ]

答案 1 :(得分:0)

通过稍微改变从服务器返回字符串的方式,您可以JSON.parse它

var dataString = '[{"name":"Bartek","age":34},{"name":"John","age":27},{"name":"Elizabeth","age":30}]';
var data = JSON.parse(dataString);
console.log(data);

答案 2 :(得分:0)

使用eval()方法评估给定代码的完成值。如果完成值为空,则返回undefined:



var tableData = "[{ name: 'Bartek', age: 34 },{ name: 'John', age: 27 },{ name:'Elizabeth', age: 30 }]";

tableData = eval(tableData);
console.log(tableData[0]);