Получить путь к значению JSON, используя JSON.NET
Я пытаюсь найти путь к значению JSON. Рассмотрим следующий JSON:
{
"car": {
"type": [{
"sedan": {
"make": "honda",
"model": "civics"
}
},
{
"coupe": {
"make": "ford",
"model": "escort"
}
}]
}
}
Как я могу получить путь значения "honda"? Я ищу что-то вроде этого...
car_type_0_sedan_make_Хонда
делает JSON.NET поддержать это? Я вижу, что есть JToken.Путь свойство, но в настоящее время оно недоступно. http://json.codeplex.com/workitem/24136
4 ответов
обновление последняя версия of Json.NET - ... The Path
свойство JToken
на версии 5.0 1 (7 апреля 2013).
вот тестовая программа, которую вы можете использовать, чтобы убедиться, что она работает:
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
вы также можете попробовать 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
существует также способ получить путь только по значению, используя 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);
вы можете преобразовать Json в динамический объект, как показано ниже.
JavaScriptSerializer js=new JavaScriptSerializer();
var dataObject=Json.Decode(jsonString);
затем вы можете поразмыслить над ним и узнать свою строку "honda" и построить путь, как вам нравится.