Вызов правильных значений JSON из вложенных объектов - PullRequest
0 голосов
/ 12 октября 2018

Я звоню в 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
  • [объект Объект]

  • undefined

  • undefined
  • 33

Как правильно вызвать вложенные объекты JSON для правильного элемента?

Я пытался сделать:

entry.rank.nr

, но это возвращает "Uncaught TypeError: Невозможно прочитать свойство 'nr' из неопределенного"

1 Ответ

0 голосов
/ 12 октября 2018

Решение

Конечная точка, которую вы вызываете, не возвращает нескольких игроков, она возвращает один единственный объект 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,именно поэтому name и tag вернулись правильно, но rank вернулись как объект.

Второй элемент - stats.Результаты в этой строке объясняют, почему ваша вторая итерация вернула name и tag как undefined, но rank как 33.

Я полагаю, вы получили много undefined s после этого (по три на каждый предмет).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...