如何使用JSONPath通过JSON内部数组中包含的字符串值过滤JSON



我在下面列出了我的示例JSON,我想写一个JSONPath,当主题具有(或包含(";数学;。

注意:我正在使用Goessner的JSONPath,使用Newtonsoft库(C#(**

{
"class":{
"type":"group",
"identifier":"MyFavClass",
"subs":[
{
"type":"individual",
"identifier":"Rambo"
},
{
"type":"individual",
"identifier":"Rancho"
},
{
"type":"biggroup",
"identifier":"village",
"subjects":[
"Maths",
"English"
]
},
{
"type":"biggroup",
"identifier":"newvillage",
"subjects":[
"Maths"
]
}
]
}
}

假设您使用Json.NET的SelectTokens()方法进行JSONPath查询,您可能会使用以下查询找到所有数学科目:

var value = "Maths";
var subjects = root.SelectTokens($"class.subs[*].subjects[?(@ == '{value}')]");

当然,这只会返回一个值为"Maths"JValue令牌序列。如果想要subjects[*]数组中包含"Maths"class.subs[*]对象,可以执行以下操作:

var subs = root.SelectTokens($"class.subs[?(@.subjects[?(@ == '{value}')])]");

注:

  • [?(...)]将筛选表达式...应用于数组。

  • 在过滤器表达式中,可以使用当前对象的@符号来匹配作为基元值的数组内容。

  • Json.NET的JSONPath实现支持数组筛选器表达式中的嵌套查询。因此,[?(@.subjects[?(@ == '{value}')])]匹配在其"subjects"数组中具有与值参数匹配的项的数组项。

  • 请注意,必须对包含单引号字符'的搜索值进行转义,如查询具有JSON路径和转义属性的JSON中所示。因此,如果要匹配的字符串是Math's,则需要像这样转义:

    var value = "Math's".Replace("'", "\'");
    

在这里演示小提琴。

相关内容

  • 没有找到相关文章

最新更新