我正在使用Json.Net的SelectToken方法来使用JSONPath查询JSON,表达式如下:
JToken acme = o.SelectToken("$.Manufacturers[?(@.Name == 'Acme Co')]");
字符串
-- http://www.newtonsoft.com/json/help/html/QueryJsonSelectTokenJsonPath.htm
JSONPath是否支持XPath样式的字符串函数?
我所说的字符串函数是指在XPath中如何使用like?
例如,contains()
方法是否有语法?
我试过了
o.SelectToken("$.Manufacturers[?(contains(@.Name, 'Acme')]");
型
但是JSON.NET会抱怨语法错误(它不喜欢contains
)。
1条答案
按热度按时间jljoyd4f1#
Json.NET Release 11为JSONPath查询引入了regex operator
=~
。使用它,你可以进行字符串模式匹配,包括contains()
匹配。举例来说:Acme
的值,请使用=~ /Acme/
:字符串
Acme
的值,请将其括在\b
中:型
acme
的字符串进行不区分大小写匹配,请在不区分大小写部分的前面加上(?i)
:型
(?-i)
结束不区分大小写的匹配。=~ /^(?!.*Acme).*$/)
:型
参见:C# Regex to match a string that doesn't contain a certain string?。
Acme
开头的字符串**,请在正则表达式的开头插入^
:型
Acme
结尾的字符串**,请在正则表达式末尾添加$
:型
N
**的字符串,请使用=~ /(?s)^.{N}$/)
:型
这里
(?s)
指定单行模式(强制将换行符包括在字符计数中),.
匹配任何字符,quantifier.{7}
需要前面标记.
的7个匹配,^
和$
匹配字符串的开头和结尾(这将防止正则表达式匹配长度超过7个字符的字符串)。演示小提琴here。