JSONPath 中的字符串函数

问题描述 投票:0回答:1

我正在使用 Json.NetSelectToken 方法使用 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
)。

c# json xpath json.net jsonpath
1个回答
0
投票

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).*$/)]")
    

    参见:C# 正则表达式来匹配不包含特定字符串的字符串?.

演示小提琴在这里

© www.soinside.com 2019 - 2024. All rights reserved.