如何用AngularJS过滤嵌套JSON:筛选name为John且含sport爱好的数据
嘿,我来帮你解决这个嵌套JSON查询的问题!看起来你之前尝试筛选name为John且hobbies包含sport的数据没成功,大概率是没处理好嵌套数组的判断逻辑,我给你两种常用的解决方案:
方案1:用JavaScript在前端/Node.js中处理
假设你的原始JSON数组是这样的:
[ {"id":1,"name":"John","hobbies":[{"kind":"sport"},{"kind":"music"}]}, {"id":2,"name":"Jane","hobbies":[{"kind":"reading"}]}, {"id":3,"name":"John","hobbies":[{"kind":"art"}]} ]
你可以结合filter和some方法来实现精准筛选:
const data = [ {"id":1,"name":"John","hobbies":[{"kind":"sport"},{"kind":"music"}]}, {"id":2,"name":"Jane","hobbies":[{"kind":"reading"}]}, {"id":3,"name":"John","hobbies":[{"kind":"art"}]} ]; // 筛选逻辑:name是John,且hobbies中至少有一项的kind是sport const filteredResult = data.filter(item => item.name === "John" && item.hobbies.some(hobby => hobby.kind === "sport") ); console.log(filteredResult[0]); // 输出你要的预期结果:{"id":1,"name":"John","hobbies":[{"kind":"sport"},{"kind":"music"}]}
这里的关键是用some方法遍历嵌套的hobbies数组,判断是否存在符合条件的元素——直接用item.hobbies.kind === "sport"是行不通的,因为hobbies是数组,不是单个对象。
方案2:用专门的JSON查询工具(如JMESPath、jq)
如果你是在命令行或者用工具处理JSON文件,推荐用这类专业的查询语言:
JMESPath查询语句:
[?name == 'John' && contains(hobbies[*].kind, 'sport')]这个语句会先筛选所有
name为John的项,再检查hobbies数组的kind字段集合里是否包含"sport",返回符合条件的结果。jq命令行工具:
如果你用jq,执行以下命令即可:jq '.[] | select(.name == "John" and any(.hobbies[]; .kind == "sport"))' your-data.json它会遍历JSON数组,筛选出满足两个条件的对象。
内容的提问来源于stack exchange,提问作者ArchDeveloper
相关产品推荐
相关产品推荐

