我有一些从我的服务器返回的JSON,看起来像这样
[{"name1":"value1","name2":"value2"},{"name1":"value1","name2":"value2"},{"name1":"value1","name2":"value2"}]
然后我使用
处理这个问题var data = JSON.parse(json);
然后,一旦这样做,我就在循环中调用它
data.item(i);
或使用该功能 data.splice(i,1); 给我错误
data.item不是函数
或
data.splice不是函数
我很确定这是因为它不是一个真正的javascript数组,但我没有发现任何告诉我如何将其转换为一个
编辑我实际上是在寻找NodeList中使用的.item()函数(来自getElementByClassName之类的东西)但是,这并没有解决我的问题.splice
答案 0 :(得分:4)
您的JSON无效 - 它需要用逗号分隔对象:
[{"name1":"value1","name2":"value2"},{"name1":"value1","name2":"value2"},{"name1":"value1","name2":"value2"}]
像你一样解析JSON:
var data = JSON.parse(json);
要访问每个对象,请使用数组的索引:
var element1 = data[0]; // first element
var element2 = data[1]; // second element
等
并访问对象中的值:
var name1 = data[0].name1; // value1
甚至,因为您已经定义了element1
变量:
var name1 = element1.name1;
如果您正在使用循环:
for (var i = 0, l = arr.length; i < l; i++) {
console.log(data[i]);
}
答案 1 :(得分:0)
运行data = JSON.parse(json)
后,您可以使用data
或data instanceof Array
验证Array.isArray(data)
是否为数组。
在这种情况下,两者都应该是真的,因为你有一个数组。 JS数组没有item
方法(也就是说,Array.prototype
没有设置为函数的属性item
,或者实际上是item
所有的财产),所以你试图打电话给不存在的东西。
要从数组中访问元素,请使用带有数字的arr[n]
语法。这是您检索元素的方式,而不是调用item
。
解析时,如果您的JSON无效,则会抛出异常。您应该在JSON.parse
块中包含try { ... } catch
调用以安全地处理它。
总之,您的代码看起来像:
try {
var data = JSON.parse(json);
if (data && data.length) { // make sure data is a real thing and has some items
for (var i = 0; i < data.length; ++i) {
console.log(data[i]); // using [] to access the element
}
}
} catch (e) {
console.error('Parsing JSON failed:', e);
}