У меня есть большой вложенный JSON. Я не знаю структуру JSON. У меня просто есть набор ключей, которые присутствуют в JSON, но я не знаю, где именно в JSON. Как узнать путь ключа из неизвестной структуры JSON, если ключ где-то в ней существует?
Получите путь к ключу из вложенного JSON, используя Json.Net
Ответы (4)
Если ваша структура JSON неизвестна, вы можете разобрать ее на JToken
. как это:
JToken token = JToken.Parse(json);
Оттуда вы можете использовать либо SelectToken()
, либо SelectTokens()
с рекурсивным спуском JsonPath, чтобы найти свойство (или свойства), соответствующее ключу:
JToken match = token.SelectToken("$.." + keyToFind);
Получив соответствующий токен, вы можете получить путь к нему, используя его Path
< /а> свойство:
string path = match?.Path;
Вот рабочая демонстрация, которая предполагает, что у вас есть несколько ключей для поиска, и каждый ключ может появляться в JSON несколько раз: https://dotnetfiddle.net/9Em9Iq
Для неизвестной структуры вы можете перебирать объекты:
var reader = new JsonTextReader(new StringReader(jsonText))
while (reader.Read())
{
// Do a condition on the variables reader.TokenType, reader.ValueType, reader.Value
}
Этот метод будет регистрировать все пути в вашем json верхнего уровня, у которых есть ключ, равный «ключу»
var keys = jobject.Properties().Where(p => p.Name == key).ToList();
keys.ForEach(i => Console.WriteLine(i.Path));
Это НЕ будет работать рекурсивно, но отсюда легко выполнить рекурсивный поиск.
вы можете использовать
JObject o = JObject.Parse(<yourjson>);
dynamic obj = o.SelectTokens("$..Product");