节点js上的JSON

时间:2018-03-22 22:07:06

标签: javascript json node.js loops undefined

我是Node的新手,我想从API解析JSON。

问题是我可以访问几乎所有的JSON,但它有一些我没有得到的元素。

var request = require("request");

var url = 'https://cf.biwenger.com/api/v1/competitions/la-liga/data';
request(url, function (error, response, body) {
    if (!error && response.statusCode == 200) {
        var jsonObject = JSON.parse(body);

        console.log(jsonObject.data.teams);
    }
});

我有这个代码来获取JSON上的团队,这就是我获得的:

{ '1': 
  { id: 1,
    name: 'Athletic',
    slug: 'athletic',
    nextMatch: 
     { id: 4665,
       date: 1522505700,
       round: [Object],
       home: true,
       against: [Object] } },
 '2': 
  { id: 2,
    name: 'Atlético',
    slug: 'atletico',
    nextMatch: 
     { id: 4668,
       date: 1522608300,
       round: [Object],
       home: true,
       against: [Object] } },
 '3': 
  { id: 3,
    name: 'Barcelona',
    slug: 'barcelona',
    nextMatch: 
     { id: 4666,
       date: 1522521900,
       round: [Object],
       home: false,
       against: [Object] } },
 ...(and much more)

现在我想获得团队的所有名字,我试图这样做,但我总是未定义,除非我提出类似的东西:

console.log(jsonObject.data.teams["1"]["name"]); //Athletic
console.log(jsonObject.data.teams["2"]["name"]); //Atlético

如何在不获取未定义的情况下迭代该JSON?

非常感谢!!

3 个答案:

答案 0 :(得分:1)

使用Object.values获取数组然后映射

const data = { 
  '1': { 
    id: 1,
    name: 'Athletic',
    slug: 'athletic'
  },
  '2': {
    id: 2,
    name: 'Man Utd',
    slug: 'man-utd'
  },
  '3': {
    id: 3,
    name: 'Liverpool',
    slug: 'liverpool'
  }
};

const getTeams = data => 
  Object.values(data)
    .map(team => team.name);
    
console.log(getTeams(data));

您可以阅读Object.values hereArray.prototype.map函数here

答案 1 :(得分:0)

使用函数Object.values获取值,并使用for-loop循环遍历该数组:

Object.values(jsonObject.data.teams).forEach(function(team) {
    console.log(team.name)
})

var jsonObject = {  data: {    teams: {      '1': {        id: 1,        name: 'Athletic',        slug: 'athletic',        nextMatch: {          id: 4665,          date: 1522505700,          round: [Object],          home: true,          against: [Object]        }      },      '2': {        id: 2,        name: 'Atlético',        slug: 'atletico',        nextMatch: {          id: 4668,          date: 1522608300,          round: [Object],          home: true,          against: [Object]        }      },      '3': {        id: 3,        name: 'Barcelona',        slug: 'barcelona',        nextMatch: {          id: 4666,          date: 1522521900,          round: [Object],          home: false,          against: [Object]        }      }    }  }}

Object.values(jsonObject.data.teams).forEach(function(team) {
    console.log(team.name);
});
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)

为了以最简单的方式迭代每个团队的名称,您可以遍历每个团队,然后访问每个团队的名称:

for (var id in jsonObject.teams) {
  if (jsonObject.teams.hasOwnProperty(id)) {
    console.log(jsonObject.teams[id].name);
  }
}
但是,当你说你“未定义”时,我不确定你的意思。您能否告诉我们您尝试这样做的方式,以便我们能够理解您理解中的错误?