繁体   English   中英

如果一个条件不正确,如何在 JsonPath 中使用 OR 条件

[英]How to use OR condition in JsonPath if one condition is not correct

我可以有以下 JSON:

{
  "class": [
    {
      "extension": [
        {
          "url": "example.com",
          "valueIdentifier": {
            "value": "myValue"
          }
        }
      ]
    }
  ]
}

或者

{
  "class": [
    {
      "extension": [
        {
          "url": "example.com",
          "valueString": "myValue"
        }
      ]
    }
  ]
}

我想根据 json 检索valuevalueString值。在 XPath 中,我可以使用| operator 和 engine 将取适当的值:

/*:class/*:extension[@url='example.com']/*:valueString/@value | /*:class/*:extension[@url='example.com']/*:valueIdentifier/*:value/@value

JsonPath 似乎不能那样工作。 我在 JsonPath 中尝试了很多不同的组合,但没有一个有效。 我使用Jayway引擎。 我试过了:

$.class[0].extension[?(@.url=="example.com")].valueString ||
   $.class[0].extension[?(@.url=="example.com")].valueIdentifier.value

$.class[0].extension[?(@.url=="example.com")]['valueString', 'valueIdentifier', 'value']

$.class[0].extension[?(@.url=="example.com")].[?(@.value)].[*]

有人知道是否可以写出相同(或相似)的表达式吗?

找到了答案。

$.concat($.class[0].extension[?(@.url=="example.com")].[?(@.valueString || @..value)].valueIdentifier.value,$.class[0].extension[?(@.url=="example.com")].[?(@.valueString || @..value)].valueString)

解决方案适用于版本(至少) 2.7的 Jayway 引擎。 我也试过2.4版,但没有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM