【问题标题】:JSONPath: Get root array object using filter of child valueJSONPath:使用子值过滤器获取根数组对象
【发布时间】:2021-08-24 13:12:50
【问题描述】:

我正在尝试获取 JSONPath 表达式来过滤我的 JSON 并使用子数组的值获取整个运动对象。

我有以下 JSON:

[{

        "name": "Soccer",
        "regions": [{
                "name": "Australia",
                "leagues": [{
                        "name": "Australia league",
                        "inplay": 5,
                    }
                ]
            }
        ]
    }, {

        "name": "Tennis",
        "regions": [{
                "name": "Germany",
                "leagues": [{
                        "name": "Germany league",
                        "inplay": 0,
                    }
                ]
            }
        ]
    }
]

我需要使用 JsonPath 表达式获取“inplay == 0”的整个运动对象。

结果应该是这样的:

 {

    "name": "Tennis",
    "regions": [{
            "name": "Germany",
            "leagues": [{
                    "name": "Germany league",
                    "inplay": 0,
                }
            ]
        }
    ]
}

地区和联赛计数可以> 1 所以$[?(@.regions[0].leagues[0].inplay == 0)]不适合

试过$[?(@.regions[*].leagues[*].inplay == 0)]但没用

【问题讨论】:

    标签: java jsonpath json-path-expression


    【解决方案1】:

    这对我有用

    $[?(@.regions[0].leagues[0].inplay == 0)]
    

    【讨论】:

    • 感谢您的回答。但是地区和联赛可以超过1个。试过$[?(@.regions[*].leagues[*].inplay == 0)]但它不起作用
    • 是的,不能在表达式中使用深度扫描或通配符。我想你需要另寻出路,我现在没办法了。
    【解决方案2】:

    由于 JayWay JSONPath 不直接支持(截至目前),我们将contains 用作workaround

    $[?(@.regions..inplay contains '0')]
    

    注意:看起来 contains 的工作方式类似于 'like' 运算符或 instr 函数,但此处并非如此。如果 inplay 值包含 0,例如10 它不会拉记录(根据我的测试;)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2021-11-28
      • 2023-03-09
      • 2021-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多