16

我正在尝试查找 JSON 值的路径。考虑以下 JSON:

{
    "car": {
        "type": [{
            "sedan": {
                "make": "honda",
                "model": "civics"
            }
        },
        {
            "coupe": {
                "make": "ford",
                "model": "escort"
            }
        }]
    }
}

如何获取值“honda”的路径?我正在寻找类似的东西......

car_type_0_sedan_make_本田

JSON.NET 支持这个吗?我看到有一个JToken.Path属性,但它目前不可用。http://json.codeplex.com/workitem/24136

4

4 回答 4

24

你也可以试试这样的SelectToken方法:

var j = JObject.Parse(json);
var token = j.SelectToken("car.type[0].sedan.make");
Console.WriteLine(token.Path + " -> " + token.ToString());

输出:

car.type[0].sedan.make -> honda
于 2014-11-10T00:39:53.770 回答
19

更新到最新版本的 Json.NET。该Path属性已添加到JToken5.0版本 1(2013 年 4 月 7 日)中。

这是一个测试程序,您可以使用它来验证它是否有效:

class Program
{
    static void Main(string[] args)
    {
        string json = @"
        {
            ""car"": {
                ""type"": [{
                    ""sedan"": {
                        ""make"": ""honda"",
                        ""model"": ""civics""
                    }
                },
                {
                    ""coupe"": {
                        ""make"": ""ford"",
                        ""model"": ""escort""
                    }
                }]
            }
        }";

        JObject obj = JObject.Parse(json);
        JToken token = obj["car"]["type"][0]["sedan"]["make"];
        Console.WriteLine(token.Path + " -> " + token.ToString());
    }
}

输出:

car.type[0].sedan.make -> honda
于 2013-11-10T19:18:38.517 回答
5

还有一种方法可以使用 linq 仅通过值检索路径。为此,您将需要 Json.NET。

JObject jo = JObject.Parse(json);
var token = jo.Descendants()
                    .OfType<JProperty>()
                    .Where(p => p.Value.ToString() == "honda")
                    .First();

        Console.WriteLine(token.Path);

见:https ://dotnetfiddle.net/vZ1zLg

于 2018-04-26T12:50:39.727 回答
-3

您可以将 Json 转换为动态对象,如下所示。

JavaScriptSerializer js=new JavaScriptSerializer();
var dataObject=Json.Decode(jsonString);

然后您可以对其进行反思并找出您的字符串“honda”并根据需要构建路径。

于 2013-11-10T18:23:15.263 回答