【发布时间】:2019-12-09 22:50:26
【问题描述】:
我正在尝试使用 Newtonsoft.Json 在 C# 中为一些 JSON 文档编写一个过滤类,这些文档要求我们可以过滤 JSON 文档中的任何内容并验证特定文档是否满足条件。到目前为止,JSONPath 似乎非常适合检查一组对象中是否存在一个值,但我正在努力弄清楚是否可以针对单个属性进行验证,例如:
{
"outerObject": {
"innerObject": {
"property": "value"
}
}
}
到目前为止,我已经能够验证该属性是否存在:$.outerObject.innerObject.property,但我需要做的是验证 $.outerObject.innerObject.property 等于 value。这导致我尝试$.outerObject.innerObject.property?(@ == 'value'),但我收到了一个关于意外@ 的异常。接下来我尝试了$.outerObject.innerObject.property?('value'),并没有给我异常,但是JToken返回null。
我尝试了其他一些变体:$.outerObject.innerObject.property(?(@ == 'value'))、$.outerObject.innerObject(?(@.property == 'value')),所有这些都仍然给出空值。
有人能指出我做错了什么吗,如果我在这里尝试做的事情也错了,我希望能早点被告知,然后再浪费太多时间。
【问题讨论】:
-
我还没有研究过你的例子,但是对于
SelectTokens(),过滤器表达式不能保证适用于对象内的对象——仅适用于数组内的对象。请参阅:JSONPath scripts not executing correctly for objects #1256:我不确定这一点。 JSONPath 中没有任何内容表明过滤器应该应用于对象。。有时可以找到解决方法,请参阅here 或here。