【问题标题】:&& operator in JSONpath ()JSONpath () 中的 && 运算符
【发布时间】:2016-11-08 01:35:23
【问题描述】:

下面是来自tutorial的示例json

{
    "store": {
        "book": [
            {
                "category": "reference",
                "author": "Nigel Rees",
                "title": "Sayings of the Century",
                "price": 8.95
            },
            {
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },
            {
                "category": "fiction",
                "author": "J. R. R. Tolkien",
                "title": "The Lord of the Rings",
                "isbn": "0-395-19395-8",
                "price": 22.99
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    },
    "expensive": 10
}

我正在尝试检查具有以下条件的对象

$..[?(@.price == 12.99 && @.title == 'Moby Dick')]

这应该让我重蹈覆辙,如下所示。但是,它只显示 []。

{
                "category": "fiction",
                "author": "Evelyn Waugh",
                "title": "Sword of Honour",
                "price": 12.99
            },
            {
                "category": "fiction",
                "author": "Herman Melville",
                "title": "Moby Dick",
                "isbn": "0-553-21311-3",
                "price": 8.99
            },

关于查询中哪里出现错误的任何指针?

【问题讨论】:

    标签: java json jsonpath


    【解决方案1】:

    您应该使用|| 而不是&&,因为您想要具有任一价格的对象(不是两者,这是不可能的):

    $..[?(@.price == 12.99 || @.price == 8.99)]
    

    【讨论】:

    • 我正在尝试构建一个 IF-THEN 语句。其中,如果他们两个都在那里,做点什么?
    • 我的回答会产生你的问题所说的你想要的结果。你想问一个不同的问题吗?如果是这样,请打开一个新问题。
    • 可能是我第一次不清楚。我现在修改了查询。你能看看我在这种情况下如何改变查询吗?
    • 在这种情况下你仍然会使用||,因为它仍然是一个 OR 条件。此外,如果您更改问题以使现有答案不再有意义,则应在问题中输入[UPDATED] 之类的内容。
    • 谢谢。我错过了[更新]的事情
    【解决方案2】:

    我认为您误解了 && 运算符的工作原理。如果我了解您想要什么,您可以搜索字段“价格”等于 12.99 的对象(包含所有字段)和字段“标题”等于 Moby Dick 的对象(包含所有字段)。

    但是,当您键入 $..[?(@.price == 12.99 && @.title == 'Moby Dick')] 时,您会搜索每个对象,其中一个名为“price”的字段等于 12.99,而在同一对象中,另一个名为“title”的字段等于 Moby Dick。

    并且没有一个对象满足这两个条件。所以答案是 [](找不到对象或不匹配)

    为了得到正确的结果,你不要搜索这个对象和这个对象,但是这个字段的对象等于或(|| 运算符)这个其他字段的对象等于。

    所以cybersam的答案是程序化的正确答案

    我希望这很清楚并有所帮助

    【讨论】:

      猜你喜欢
      • 2015-06-24
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      • 2015-07-08
      相关资源
      最近更新 更多