Javascript-解析JSON以查找对象字符串
我正在创建一个网页,其中显示我从JSON解析的数据。我使用2个JSON文件。一个我可以毫无问题地解析的问题,另一个我正在努力解决。Javascript-解析JSON以查找对象字符串,javascript,json,Javascript,Json,我正在创建一个网页,其中显示我从JSON解析的数据。我使用2个JSON文件。一个我可以毫无问题地解析的问题,另一个我正在努力解决。 我希望能够解析JSON以查找特定的对象字符串,并返回同一字典中的所有其他对象字符串 JSON的布局是: { "example":[ { "Area":"Inside", "Player":"1", "Status":1, "Start_Time":"2016-12-21", "End_Time"
我希望能够解析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'
我试图用javascript解析JSON,这就是我解析其他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();
感谢您的帮助。使用forEach循环
var a={
“示例”:[
{
“区域”:“内部”,
“玩家”:“1”,
“地位”:1,
“开始时间”:“2016-12-21”,
“结束时间”:“2016-12-22”,
},
{
“区域”:“外部”,
“玩家”:“1”,
“地位”:1,
“开始时间”:“2016-12-24”,
“结束时间”:“2016-12-25”,
},
{
“区域”:“外部”,
“玩家”:“2”,
“地位”:1,
“开始时间”:“2016-12-26”,
“结束时间”:“2016-12-28”,
}
]
};
a、 示例.forEach(e=>e.Player==“1”和&e.Area==“Inside”?console.log(e):false)
您可能需要尝试过滤器
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"}
这里确实有两个问题:获取JSON,然后解析它以找到感兴趣的数据。下面的代码片段使用
fetch()
(是XMLHttpRequest
的现代继承者)处理第一个任务,使用Array.prototype.filter
处理后一个任务
请注意,如果您不使用现代javascript环境,此解决方案将失败。还请注意,可以使用新的async/await来改进这一点。为了简单起见,我排除了它们
fetch(“http://web/server/file.json“”//在现代浏览器中受支持。
.then(res=>res.json())//解析为json。如果给定不正确的json,则失败
。然后(数据=>{
console.log(data.example.filter(el=>el.Player==1));//filter只返回满足条件的元素的数组
});
由于我的json与我的javascript是一个单独的文件,我会使用var test=myObj.example.forEach(e=>e.Player==“1”?console.log(e):false)
你必须从文件导出json,并且在你的js文件中,你必须像下面那样导入它。/jsonfile.js'。然后你可以使用上面的代码!谢谢,这个有用!如果我想,当Player==“1”
和区域==“内部”
时,它将如何工作。我尝试使用&&
,因为这对我来说最有意义,但我得到了一个错误。forEach不是这个问题的标准解决方案。创建filter方法正是为了解决这个问题。forEach是一个很好的(虽然不是最理想的)解决方案,它只记录满足条件的元素。然而,它不允许我们对这些元素做任何事情。此外,OP的措辞意味着他们还需要帮助检索和准备JSON以进行操作。我得到这个错误TypeError:data.filter不是fetch的函数。然后.then.data
应该被修复-没有看到数组被嵌套。必须将Player==1
更改为Player==“1”
而且它很有效!当Player=“1”
和Area=“Outside”
时,我将如何做?您将把所有条件放在箭头(=>)之后。例如:data.example.filter(el=>el.Player==“1”&&el.Area==“外部”)代码>您知道如何控制json无效时出现的错误吗?请参见:检查编辑