【问题标题】:Find path/namespace of JToken in a Newtonsoft JObject在 Newtonsoft JObject 中查找 JToken 的路径/命名空间
【发布时间】:2013-01-01 05:26:28
【问题描述】:

我有以下代码示例(使用 Newtonsoft Json.NET 的 C#)将 Json 字符串序列化为 JObject:

var obj = JObject.Parse("{\"F01\" : \"f01\", " +
                    "\"F02\" : \"f02\", " +
                    "\"L01\" : [" +
                        "{" +
                            "\"L01F01\" : \"l01f01\", " +
                            "\"L01F02\" : \"l01f02\"" +
                        "}, " +
                        "{" +
                            "\"L01F01\" : \"l01f01\", " +
                            "\"L01F02\" : \"l01f02\"" +
                        "}, " +
                        "{" +
                            "\"L01F03\" : \"l01f03\" " +
                        "}, " +
                        "{" +
                            "\"L01F03\" : \"l01f03\", " +
                            "\"L01L02\" : [" +
                                "{" +
                                    "\"L01L02F01\" : \"l01l02f01\"" +
                                "}" +
                            "]" +
                        "}" +
                    "]" +
                    "}");

请注意,JSON 具有动态结构,其中并非数组中的所有项目都具有相同的名称和属性。

我制作了以下 JToken:

var test01 = obj["F01"];
var test02 = obj["L01"][0]["L01F01"];
var test03 = obj["L01"][3]["L01L02"][0]["L01L02F01"];

我想知道是否有人知道以类似于以下方式获取测试变量的“路径”的任何方法:

GetPathOf(test01) => "F01"
GetPathOf(test02) => "L01[0].L01F01"
GetPathOf(test03) => "L01[3].L01L02[0].L01L02F01"

谢谢!

【问题讨论】:

    标签: c# .net json path json.net


    【解决方案1】:

    release 5.0.1(2013 年 4 月 7 日)中的 JToken 中添加了一个 Path 属性,它完全符合您的描述。

    所以在你的例子中你可以简单地写:

    string path03 = test03.Path;
    

    path03 变量将包含 L01[3].L01L02[0].L01L02F01

    小提琴:https://dotnetfiddle.net/5Dhc4i

    【讨论】:

    • 通过将 Path 传递给 JToken 来获取嵌套 JToken 的相反方法是使用 myJToken.SelectObject(myPath)。 click。还有一些重载。
    猜你喜欢
    • 2014-07-26
    • 1970-01-01
    • 2012-07-26
    • 2018-11-23
    • 2016-05-08
    • 1970-01-01
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多