Javascript - анализировать JSON для поиска строки объекта

1

Я создаю веб-страницу, которая отображает данные, которые я проанализировал из JSON. Я использую 2 файла JSON. Один я могу разобрать без проблем, второй я борюсь с.
Я хочу иметь возможность анализировать JSON в поисках определенной строки объекта и возвращать все другие строки объекта в том же словаре.

Макет JSON:

{
  "example":[
    {
      "Area":"Inside",
      "Player":"1",
      "Status":1,
      "Start_Time":"2016-12-21",
      "End_Time":"2016-12-22",
    },
    {
      "Area":"Outside",
      "Player":"1",
      "Status":1,
      "Start_Time":"2016-12-24",
      "End_Time":"2016-12-25",
    },
    {
      "Area":"Outside",
      "Player":"2",
      "Status":1,
      "Start_Time":"2016-12-26",
      "End_Time":"2016-12-28",
    }
  ]
}

я хочу сказать

if (player=="1") {//show ALL areas and start and end time}
//output should be something like: Area: Inside, Player: 1, Status: 1, Start_Time: 'Time', End_Time: 'Time', Area: Outside, Player: 1, Status: 1, Start_Time: 'Time', End_Time: 'Time'

Я пытаюсь проанализировать JSON в JavaScript, вот как я анализирую другой JSON:

var xmlhttp = new XMLHttpRequest();
xmlhttp.onreadystatechange = function() {
  if (this.readyState == 4 && this.status == 200) {
    var myObj = JSON.parse(this.responseText);
    var dateTime = myObj.Date;
  }
};
xmlhttp.open("GET", "http://web/server/file.json", true);
xmlhttp.send();

Любая помощь приветствуется.

  • 0
    Проверьте правки
Теги:

3 ответа

0
Лучший ответ

У вас действительно есть две проблемы: выбор JSON, а затем его синтаксический анализ для поиска интересующих вас данных. Следующий фрагмент кода выполняет первую задачу с помощью fetch() (современный преемник XMLHttpRequest) и последнюю задачу с Array.prototype.filter.

Обратите внимание, что если вы не используете современную среду JavaScript, это решение не поможет. Также обратите внимание, что это можно улучшить с помощью новой функции async/await. Я исключил их для простоты.

fetch("http://web/server/file.json") // supported in modern browsers.
  .then(res => res.json()) // parses into JSON. Fails if given improper json
  .then(data => {
    console.log(data.example.filter(el => el.Player === 1)); // filter returns an array with only elements that meet the condition
  });
  • 0
    Я получаю эту ошибку TypeError: data.filter is not a function at fetch.then.then.data
  • 0
    Должно быть исправлено - не видел, что ваш массив был вложенным.
Показать ещё 3 комментария
2

Вы можете попробовать filter

myObj.example.filter(obj => obj.Player == "1")

// 0: {Area: "Inside", Player: "1", Status: 1, Start_Time: "2016-12-21", End_Time: "2016-12-22"}
// 1: {Area: "Outside", Player: "1", Status: 1, Start_Time: "2016-12-24", End_Time: "2016-12-25"}


0

Использование цикла forEach

var a={
  "example":[
    {
      "Area":"Inside",
      "Player":"1",
      "Status":1,
      "Start_Time":"2016-12-21",
      "End_Time":"2016-12-22",
    },
    {
      "Area":"Outside",
      "Player":"1",
      "Status":1,
      "Start_Time":"2016-12-24",
      "End_Time":"2016-12-25",
    },
    {
      "Area":"Outside",
      "Player":"2",
      "Status":1,
      "Start_Time":"2016-12-26",
      "End_Time":"2016-12-28",
    }
  ]
};
a.example.forEach(e=>e.Player=="1" && e.Area=="Inside"?console.log(e):false)
  • 0
    Поскольку мой json является отдельным файлом для моего javascript, я бы использовал var test = myObj.example.forEach(e=>e.Player=="1"?console.log(e):false)
  • 0
    Вы должны экспортировать JSON из файла, а в свой js-файл вы должны импортировать его, как следующий import json from './jsonfile.js' . Тогда вы можете использовать приведенный выше код
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню