c# - Json.NET JsonPath 语法“不包含”,还是否定匹配?
问题描述
我正在尝试过滤我的 json 中没有“名称”属性的书籍。
我发现它在 Java JsonPath 中受支持
$..book[?(!@.name)]
但是当我在 C# 中使用它时::
json.SelectTokens("$..book[?(!@.name)]")
我有 ::
"Unexpected character while parsing path query: !"
也试过::
json.SelectTokens("$..book[?(@.name == null)]")
已解析但返回 0 个结果。
解决方案
您可以使用 LINQ 语法来获取不包含属性的标记。
我不知道你的确切 JSON,所以我模拟了一个简单的例子。如果您发布您的 JSON,我将更新我的答案以使用您的特定 JSON。
测试 JSON:
JObject o = JObject.Parse(@"{
'books': [
{'book':{'name':'some book name 1', 'author':'bob smith'}},
{'book':{'author':'mary smith'}}
]}");
如何获得没有name
财产的代币:
var result = o.SelectTokens("books[*].book").Where(t => t["name"] == null);
// result = {{ "author": "mary smith" }}
推荐阅读
- reactjs - 使用示例响应式抽屉时,材质 UI 表没有响应
- html - 菜单与 CSS3 对齐
- jquery - 无法获取 JSP 表单以读取返回的 JSON 数组
- python - 从 word2vec 过滤词嵌入
- python - 如何在 Python 中将 unicode 字符(ASCII 10)转换为文本
- python - 使用 randomsearchcv 给出的最佳估计器进行预测时得到奇怪的结果
- css - 如何在 RTL 转换期间禁用以前样式表中的 CSS 属性?
- node.js - 使用 jsdom 将 JSON 反序列化为 DOM 时出现 Node.js 内存泄漏
- regex - Column1 中的 SQL REPLACE 和 Column 2 中的 UPDATE 同时
- php - 使用 PHP 将数据发布到 SOAP API