从JSON中的对象数组中只获取一个元素

时间:2015-12-26 23:04:27

标签: javascript arrays json object

如何从JSON文件中仅获取名称。此外,代码完全适用于从" file.json"获取数据。即,这不是问题肯定。

JavaScript的:



NullPointerException




" file.json" - JSON:



var data = [];
function getName() {
  //what should I write here to get only name from the first object i.e. John
  //with this: data[0].name I am getting error!
}

var xhttp;
if(window.XMLHttpRequest)
  xhttp = new XMLHttpRequest();
else
  xhttp = new ActiveXObject("Microsoft.XMLHTTP");
    
xhttp.onreadystatechange = function() {
  if(xhttp.readyState == 4) {
    data = JSON.parse(xhttp.responseText);
    getName();
  }
}

xhttp.open("GET","file.json",true);
xhttp.send();




4 个答案:

答案 0 :(得分:6)

通过函数

传递变量数据
var data = [];
function getName(data) {
  return data[0].name;
}

var xhttp;
if(window.XMLHttpRequest)
  xhttp = new XMLHttpRequest();
else
  xhttp = new ActiveXObject("Microsoft.XMLHTTP");

xhttp.onreadystatechange = function() {
  if(xhttp.readyState == 4) {
    data = JSON.parse(xhttp.responseText);
    getName(data);
  }
}

xhttp.open("GET","file.json",true);
xhttp.send();

此外,如果要检索所有名称,可以执行以下操作:

function getName(data) {
  var names = [];
  for (var i = 0; i < data.length; i++) {
      names.push(data[i].name);
  }
  return names;
}

(数据是数组数据)

答案 1 :(得分:4)

使用Array.prototype.map()转换数组中的项目:

data.map(function(item) {
    return item.name
});

答案 2 :(得分:1)

您的getName功能应如下所示:

function getName(){
  a.forEach(function(i,j){
     console.log(i.name);
  });
}

答案 3 :(得分:0)

值得一提的是,JSON数据类型直接映射到标准的javascript数据类型。这意味着没有JSON数组这样的东西,一旦你JSON.parse()一个字符串,那么你得到简单的javascript原语:数组,对象,字符串,数字等。

因此从JSON数组中获取元素只是访问标准javascript数组的元素。这通常通过方括号运算符var element = array[index]来实现。

然而,您的代码在几个与数组元素访问无关的部分中被破坏。

首先,您在顶层定义data变量 - 您根本不需要它(至少根据样本)。

然后,用空数组初始化它 - 我不知道为什么。

当用单词表示时,onreadystatechange回调很简单:你得到一个字符串,将其解析为json,然后调用getName提供结果。这意味着您的getName()应该需要data参数,然后您可以在函数中访问该参数。