Get path of JSON value using JSON.NET

后端 未结 4 842
北恋
北恋 2021-01-11 12:14

I am trying to find a path of a JSON value. Consider the following JSON:

{
    \"car\": {
        \"type\": [{
            \"sedan\": {
                \"mak         


        
相关标签:
4条回答
  • 2021-01-11 12:57

    You could also try the SelectToken method like this:

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

    Outputs:

    car.type[0].sedan.make -> honda
    
    0 讨论(0)
  • 2021-01-11 13:14

    Update to the latest version of Json.NET. The Path property was added to JToken in version 5.0 release 1 (April 7, 2013).

    Here is a test program you can use to verify that it works:

    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());
        }
    }
    

    Output:

    car.type[0].sedan.make -> honda
    
    0 讨论(0)
  • 2021-01-11 13:15

    you can Convert the Json to dynamic object as below.

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

    Then you can reflect over it and find out your string "honda" and construct the path as you like.

    0 讨论(0)
  • 2021-01-11 13:17

    There is also a way to retrieve the path just by the value, using linq. You will need Json.NET for this.

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

    See: https://dotnetfiddle.net/vZ1zLg

    0 讨论(0)
提交回复
热议问题