.NET - JsonNode的GetPath()方法有什么作用?

3
我正在使用System.Text.Json包来处理和操作JSON,我有一个特定场景,如果我能提供节点值的访问路径,就可以重复使用某个方法。
我注意到JsonNode类有一个GetPath()方法,如你所料,它返回目标节点的路径。
然而,似乎不能将此输出用于反向操作,也就是说,一旦你知道了路径,就不能使用它来访问一个节点的值。
例如,假设我的JSON如下所示:
{
    "cakes": {
        "cheese": "cake"
    }
}

调用node["cakes"]["cheese"]将返回"cake"

而调用node["cakes"]["cheese"].GetPath()将返回"$.cakes.cheese",即该"cake"值的路径。

然而,调用node["$.cakes.cheese"]只会返回null,而不是预期的"cake"

我是否使用不当?还是JsonNode类根本就不打算这样工作,如果是这样,那么GetPath方法的意义是什么?


2
你是在询问如何通过JSON路径检索数据吗? - Peter Csala
3
你没有错过任何东西——System.Text.Json确实缺少这个功能。该功能请求在此处(3+年仍未解决)。 - Jeroen Mostert
2
在我们等待微软的同时,有一些替代方案:https://github.com/azambrano/JsonDocumentPath,https://github.com/gregsdennis/json-everything,https://github.com/danielaparker/JsonCons.Net - Peter Csala
1个回答

5

目前(.NET 7)不支持使用路径。可能会在以后的版本中支持。

来自文档

JsonDocument DOM 不支持使用 JSON Path 进行查询。

在 JsonNode DOM 中,每个 JsonNode 实例都有一个 GetPath 方法,返回到该节点的路径。但是没有内置的 API 来处理基于 JSON Path 查询字符串的查询。

如果您需要非常灵活的 Json 支持,请使用 Newtonsoft.Json Nuget 包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接