You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:14:54