Я создаю веб-страницу, которая отображает данные, которые я проанализировал из 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();
Любая помощь приветствуется.
У вас действительно есть две проблемы: выбор 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
});
TypeError: data.filter is not a function at fetch.then.then.data
Вы можете попробовать 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"}
Использование цикла 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)
var test = myObj.example.forEach(e=>e.Player=="1"?console.log(e):false)
import json from './jsonfile.js'
. Тогда вы можете использовать приведенный выше код