从嵌套对象调用JSON的正确值

时间:2018-10-12 18:07:46

标签: javascript html json ajax

我正在以

返回的JSON进行调用

这是JSON文件的实际部分。不仅限于此,但我只是想展示如何获取嵌套值。

{
  player: {
    id: 277013255,
    game: "bf4",
    plat: "pc",
    name: "f1ss1on",
    tag: "MCG",
    dateCheck: 1524851054474,
    dateUpdate: 1524849279114,
    dateCreate: 1385342286868,
    dateStreak: 1524849279114,
    lastDay: "20160222",
    country: "",
    countryName: null,
    rank: {
      nr: 33,
      imgLarge: "bf4/ranks/r33.png",
      img: "r33",
      name: "Master Sergeant III",
      needed: 1280000,
      next: {
        nr: 34,
        imgLarge: "bf4/ranks/r34.png",
        img: "r34",
        name: "Master Sergeant IV",
        needed: 1345000,
        curr: 1317090,
        relNeeded: 65000,
        relCurr: 37090,
        relProg: 57.06153846153846
      }
    },

我的代码是:

$(document).ready(function() {
  "use strict";

  var html = '';
  $("button").click(function() {
    $.getJSON("https://api.bf4stats.com/api/playerInfo?plat=pc&name=f1ss1on&output=json", function(result) {
      $.each(result, function(i, entry) {
        html += '<ul>';
        html += '<li class="name col-5">' + entry.name + '</li>';
        html += '<li class="date col-3">' + entry.tag + '</li>';
        html += '<li class="assigned col-4">' + entry.rank + '</li>';
        html += '</ul>';
      });
    }
    $('div').html(html);
  });
});

预期收益应为

  • f1ss1on
  • MCG
  • 33

但是我得到的是回报:

  • f1ss1on
  • MCG
  • [对象对象]

  • 未定义

  • 未定义
  • 33

如何正确地将嵌套的JSON对象调用到正确的元素上?

我尝试做:

entry.rank.nr

但这会返回“未捕获的TypeError:无法读取未定义的属性'nr'”

1 个答案:

答案 0 :(得分:0)

解决方案

您正在呼叫的端点不会返回多个玩家,它会返回一个player对象,因此我不确定是否需要进行任何循环或each

以下似乎很好用:

$.getJSON("https://api.bf4stats.com/api/playerInfo?plat=pc&name=f1ss1on&output=json", function(result) {
  var player = result.player;
  console.log("Name:", player.name);
  console.log("Tag:", player.tag);
  console.log("Rank:", player.rank.nr);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


说明您的结果

要确切显示查询中出了什么问题,请打开浏览器控制台并进行查看。是以表格形式的result

$.getJSON("https://api.bf4stats.com/api/playerInfo?plat=pc&name=f1ss1on&output=json", function(result) {
  console.table(result);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

If the table doesn't appear in your console, re-run this snippet with the console already open.

在这里,您可以在表中以行的形式查看正在循环浏览的项目。

第一项是player,这就是nametag正确返回,而rank作为对象返回的原因。

第二项是stats。该行中的结果说明了为什么您的第二次迭代返回nametag作为undefined,而返回rank作为33

我想那之后您会收到很多undefined(每件三件)。