我正在使用 Json.Net 的 SelectToken 方法使用 JSONPath 查询 JSON,表达式如下:
JToken acme = o.SelectToken("$.Manufacturers[?(@.Name == 'Acme Co')]");
-- http://www.newtonsoft.com/json/help/html/QueryJsonSelectTokenJsonPath.htm
JSONPath 支持 XPath 风格的字符串函数吗?
我所说的字符串函数是指 How to use like in XPath?
contains()
方法的语法?
我已经尝试过:
o.SelectToken("$.Manufacturers[?(contains(@.Name, 'Acme')]");
但是 JSON.Net 抱怨语法错误(它不喜欢
contains
)。
Json.NET Release 11 引入了用于 JSONPath 查询的 regex 运算符
=~
。使用它您可以进行字符串模式匹配,包括 contains()
匹配。例如:
要匹配包含字符串
Acme
的值,请使用 =~ /Acme/
:
o.SelectToken("$.Manufacturers[?(@.Name =~ /Acme/)]")
要匹配包含 word
Acme
的值,请将其用 \b
括起来:
o.SelectToken("$.Manufacturers[?(@.Name =~ /\\bAcme\\b/)]")
要对包含 acme
的字符串进行
不区分大小写匹配,请在不区分大小写的部分前面加上
(?i)
:
o.SelectToken("$.Manufacturers[?(@.Name =~ /(?i)acme/)]")
(?-i)
结束不区分大小写的匹配。
要匹配不包含 Acme 的值,请使用
=~ /^(?!.*Acme).*$/)
:
o.SelectToken("$.Manufacturers[?(@.Name =~ /^(?!.*Acme).*$/)]")
演示小提琴在这里。