转换JSON不返回Javascript数组

时间:2015-07-13 20:02:28

标签: javascript jquery json

我有一些从我的服务器返回的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

2 个答案:

答案 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)后,您可以使用datadata 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);
}