我正在使用Newtonsoft的Json.Net从以下json中选择节点:
{
"projects":[
{
"name":"Project 1",
"client":{
"code":"ABC",
"name":"Client 1"
}
},
{
"name":"Project 2",
"client":{
"code":"DEF",
"name":"Client 2"
}
},
{
"name":"Project 3",
"client":{
"code":"GHI",
"name":"Client 3"
}
}
]
}
以下C#代码段
//json is a JObject representation of the json listed above
var clients = json.SelectTokens("$.projects[*].client");
产量:
[
{
"code":"ABC",
"name":"Client 1"
},
{
"code":"DEF",
"name":"Client 2"
},
{
"code":"GHI",
"name":"Client 3"
}
]
现在,这很酷,我想做的是按客户端代码过滤,我认为
$.projects[*].client[?(@.code == 'DEF')]
可以,但是我显然对语法不够了解。这将返回一个空列表:
var test1 = json.SelectTokens("$.projects[*].client[?(@.code == 'DEF')]").ToList();
并且单个令牌选择器返回null:
var test2 = json.SelectToken("$.projects[*].client[?(@.code == 'DEF')]");
我在https://jsonpath.curiousconcept.com/上尝试了几种不同的配置,看来我的查询语法确实坏了。
使用Flow Communications的JSONPath 0.3.4实现(在上面的链接上),我可以使用
$..[?(@.code == 'DEF')]
但是,此语法对于Json.Net似乎无效(也不适用于同一页面上的Goessner实现)。
有人看到我在做什么错吗?
Json.NET的JSONPath解析器允许过滤器(脚本)表达式[?( )]
查询候选数组项的子对象内的嵌套属性。从而
var test = json.SelectTokens(@"$.projects[?(@.client.code == 'DEF')].client");
根据需要返回
[
{
"code": "DEF",
"name": "Client 2"
}
]
工作。净提琴。
经过实验,似乎jsonpath.curiousconcept.com上的JSONPath实现都不支持此语法,但是它在使用https://github.com/ashphy/jsonpath-
online-evaluator的
jsonpath.com上可以正常工作。该JSONPath提案只是说是一个
脚本表达式,使用底层脚本引擎*
清楚地留下了一些解释的余地是否以及如何“应该”的工作。()
*
问题中使用的过滤器显然不适用于Json.NET,因为从10.0.3版开始,它仅正式支持将过滤器应用于数组项,而不是直接应用于对象-
请参阅问题#1256:JSONPath脚本无法正确执行讨论的对象。(尽管有时可以找到狡猾的解决方法,例如在此答案中。)但是,在过滤器中使用嵌套属性似乎是可以工作的(并且确实可以工作)。
我有以下命名查询; 当我执行代码时; 我没有得到Person类型的resultList,即使我已经明确指定了命名查询的参数。相反,我得到的类型是包含对象数组的向量。 如何使查询显式返回“Person”类型?
问题内容: 所以我创建了一个集成脚本,但是由于某种原因它没有显示出正确的结果。我的查询是 结果中出乎意料的一行之一是这个 ID为11的组具有display_style_priority 2000而不是5200。它应显示具有display_style_priority 5200的用户组ID。这是该用户所在的排名最高的组。有人可以指出我做错了什么。 问题答案: 尝试将GROUP BY更改为 其他大多数
该函数提示用户选择石头、纸或剪刀,并将输入更改为小写。如果用户未选择上述选项之一,则返回if语句。但是,如果选择了正确的选项,则会返回其他语句。 但是,如果用户输入适当的响应,else语句不会运行。 如果我输入石头/布/剪刀以外的东西,我希望if语句运行。但是如果我输入石头/纸/剪刀,我希望其他语句运行。 但是,无论如何,else语句都不会运行。
我正在使用JUnit和Mockito库来测试我的应用程序。问题是,当我在代码下面执行时,值在运行时没有返回空列表,并且测试失败。理想情况下,当get执行时,它应该返回空列表 我热切期待着支持。有没有人能帮我一下,如何通过这个测试用例???。如何通过Mockito使第8行的控件通过测试用例??? 请假设,下面两个类没有真实的代码,我们只有二进制文件作为JAR文件,我们不能修改下面的代码....我附上
我在使用MongoDB查询时遇到问题。每当我尝试通过ID或任何其他字段查找时,我总是得到零结果返回。我也很难使用“like”操作符。 我想以不区分大小写的方式查询书名。而且我知道你可以在MongoDB中这样做: 我试着装腔作势地做,但我不能让它起作用: 我看到控制台上打印出以下行:{“title”:{“$regex”:“/^harr.*/I”}} 我也尝试过一个文档,但也不成功: 结果却是零。 这
问题内容: 是否可以以预定顺序进行声明,即 选择ID 7,2,5,9和8 并以该顺序返回它们 ,仅基于ID字段? 这两个语句以相同顺序返回它们: 问题答案: 我不认为这是可能的,但是在这里找到了一个博客条目,似乎可以满足您的需求: 将给不同的结果 返回给定第二个参数的位置,因此对于上面的第一种情况,7的位置在集合中的位置1,2的位置在2,依此类推-mysql在内部得出类似 然后按的结果排序。