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

使用jsonpath-ng筛选level1层级levelName字段返回空的问题咨询

问题原因

你的查询表达式存在两个核心问题:

  • 没有显式使用@指代当前筛选的数组元素,jsonpath-ng在无明确当前节点引用时,会默认从当前节点的子级开始递归查找属性。你之前能命中childName属于递归查找的巧合:childName是当前元素的子对象child下的属性,递归可以查到;而查询levelName时,递归会优先查找子级属性,找不到匹配就返回空结果。
  • 多余的解引用层级:$.data.level1[*]已经将数组展开为单个元素,不需要额外追加一层方括号触发属性查找,直接把过滤条件写在数组的筛选块中即可。

正确表达式

查询level1层级下levelName值为level11的条目,使用以下表达式即可:
$.data.level1[?(@.levelName == 'level11')]

如果需要查询childName为first的条目,也建议显式指定路径,避免递归查找带来的不确定性:
$.data.level1[?(@.child.childName == 'first')]

验证示例(Python + jsonpath-ng)

from jsonpath_ng import parse

# 示例数据
test_data = {
    "data": {
        "level1": [
            {
                "levelName": "level11",
                "cost": 1,
                "child": {"childName": "first", "status": "running"}
            },
            {
                "levelName": "level12",
                "cost": 2,
                "child": {"childName": "second", "status": "asleep"}
            }
        ]
    }
}

# 执行查询
query_expr = parse("$.data.level1[?(@.levelName == 'level11')]")
result = [item.value for item in query_expr.find(test_data)]
print(result)
# 输出:[{'levelName': 'level11', 'cost': 1, 'child': {'childName': 'first', 'status': 'running'}}]

内容的提问来源于stack exchange,提问作者rastackr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 05:54:05