I am trying to find a path of a JSON value. Consider the following JSON:
{
\"car\": {
\"type\": [{
\"sedan\": {
\"mak
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
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
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.
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