1

我有 json

[
  {
    "name": "Name1",
    "address": "City1\nCountry1"
  },
  {
    "name": "Name2",
    "address": "City2 Country2"
  }
]

我正在使用 jayway 库使用“地址”提取“名称”。我想使用 jpath 参数化“地址”

$.*[?(@.address=='{address}')].name

但是,正如您在 json 中看到的,第一个地址上有“\n”。有没有一种方法可以为它标准化间距,所以每当我使用 jpath

$.*[?(@.address=='City1 Country1')].name

该值仍将被提取

4

1 回答 1

0

有点晚了,一个可能的 JSON-Path 解决方案是对两个部分都使用 contains 运算符:

$..[?(@.address contains 'City1' && @.address contains 'Country1')].name

但是,这与==比较不同,理论上可能会产生误报。

另一种选择是使用正则表达式过滤器=~。使用它可以让您完全控制并且能够只匹配您想要的;由于您有换行符,我们需要内联(?s).*匹配任何字符,包括换行符。

$..[?(@.address =~ /(?s)City1.*Country1/i)].name
于 2020-11-29T16:38:44.500 回答