带有正则表达式的JSONPath过滤器返回数组中的所有值而不是子集

时间:2018-06-10 17:46:34

标签: regex jsonpath

我试图弄清楚如何编写一个JSONPath过滤器,它将选择属性以子字符串结尾的数组的成员。我正在尝试使用this tool

网站提供的示例数据是

{
  "firstName": "John",
  "lastName" : "doe",
  "age"      : 26,
  "address"  : {
    "streetAddress": "naist street",
    "city"         : "Nara",
    "postalCode"   : "630-0192"
  },
  "phoneNumbers": [
    {
      "type"  : "iPhone",
      "number": "0123-4567-8888"
    },
    {
      "type"  : "home",
      "number": "0123-4567-8910"
    }
  ]
}

我希望这个过滤器只给我一个类型为“iPhone”的电话号码。

$.phoneNumbers[?(@.type =~ /ne$/ )]

相反,它给了我两个电话号码。谁能告诉我为什么?

2 个答案:

答案 0 :(得分:0)

我相信表达式应该与整个字符串匹配,否则您将不会得到任何结果。

此过滤器应该有效

$.phoneNumbers[?(@.type =~ /^[a-z|A-Z|0-9]+ne$/ )]

它与jayway配合使用,越轨返回

[
  {
    "type" : "iPhone",
    "number" : "0123-4567-8888"
  }
]

但显然不是Goessner。

我认为人行道是正确的。 My own C++ JsonPath实现的结果与jayway相同。

答案 1 :(得分:0)

Katie-抱歉,回答延迟。

$..phoneNumbers[?(@['type'] == 'iPhone')].number

希望该解决方案有效。

也许这种解决方案将对其他人有用。