You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用Jayway JsonPath通过正则过滤非'foo'开头的值

解决Jayway JsonPath筛选不以特定字符串开头的问题

你已经摸到门道啦,但这里有个正则表达式的小误区得修正下:你写的/^[^foo]/其实是匹配第一个字符不是f、o、o中任意一个的字符串,而不是你想要的不以"foo"开头的字符串——方括号[^...]是字符集否定,它会逐个排除里面的单个字符,而非排除整个字符串。

正确的JsonPath表达式

要筛选出不以"foo"开头的author,得用锚点^结合负向前瞻断言,表达式如下:

$..book[?(@.author =~ /^(?!foo).*/)].author

拆解下这个正则的逻辑:

  • ^:锁定字符串的开头位置
  • (?!foo):负向前瞻断言,确保当前位置后面紧跟着的不是"foo"
  • .*:匹配后续任意长度的字符(如果有的话)

用你的示例JSON测试验证

假设你的完整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": "fooBar",
        "title": "Example Book",
        "price": 9.99
      }
    ]
  }
}

使用正确的表达式后,会返回结果:

["Nigel Rees", "Evelyn Waugh"]

那个以"foo"开头的fooBar会被精准排除,完全符合你的需求。

额外小提示

如果需要忽略大小写(比如同时排除以"FOO"、"Foo"开头的内容),可以在正则末尾加上i标志:

$..book[?(@.author =~ /^(?!foo).*/i)].author

内容的提问来源于stack exchange,提问作者Ducaz035

火山引擎 最新活动