使用JSON.NET获取JSON值的路径

时间:2013-11-10 17:19:16

标签: c# json json.net

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

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

如何获得价值“本田”的路径?我想找到这样的东西......

car_type_0_sedan_make_的本田

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

4 个答案:

答案 0 :(得分:16)

您也可以尝试这样的SelectToken方法:

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

输出:

car.type[0].sedan.make -> honda

答案 1 :(得分:15)

更新到Json.NET的latest versionPath已将JToken属性添加到version 5.0 release 1中的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()); } } (2013年4月7日)。

以下是一个可用于验证其是否有效的测试程序:

car.type[0].sedan.make -> honda

输出:

{{1}}

答案 2 :(得分:0)

还有一种方法可以使用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

答案 3 :(得分:-3)

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

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

然后你可以反思它并找出你的字符串“honda”并根据你的意愿构建路径。