【问题标题】:JSON on Node js节点 js 上的 JSON
【发布时间】:2018-09-01 12:21:36
【问题描述】:

我是 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 而不会得到未定义??

非常感谢!!

【问题讨论】:

    标签: javascript json node.js loops undefined


    【解决方案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 的信息

    【讨论】:

      【解决方案2】:

      使用函数 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; }

      【讨论】:

        【解决方案3】:

        为了以最直接的方式遍历每个团队的名称,您可以遍历每个团队,然后访问每个团队的名称:

        for (var id in jsonObject.teams) {
          if (jsonObject.teams.hasOwnProperty(id)) {
            console.log(jsonObject.teams[id].name);
          }
        }
        

        不过,我不确定你说你“变得不确定”是什么意思。您能否向我们展示您尝试这样做的方式,以便我们理解您理解中的错误?

        【讨论】:

          猜你喜欢
          • 2011-06-05
          • 1970-01-01
          • 1970-01-01
          • 2021-09-22
          • 2021-04-11
          • 2021-09-14
          • 2018-08-23
          • 1970-01-01
          • 2020-12-22
          相关资源
          最近更新 更多