Получите путь к ключу из вложенного JSON, используя Json.Net

У меня есть большой вложенный JSON. Я не знаю структуру JSON. У меня просто есть набор ключей, которые присутствуют в JSON, но я не знаю, где именно в JSON. Как узнать путь ключа из неизвестной структуры JSON, если ключ где-то в ней существует?


person Sumit Kadam    schedule 26.12.2018    source источник


Ответы (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

person Brian Rogers    schedule 27.12.2018

Для неизвестной структуры вы можете перебирать объекты:

var reader = new JsonTextReader(new StringReader(jsonText))
while (reader.Read())
    {
        // Do a condition on the variables reader.TokenType, reader.ValueType, reader.Value

    }
person lagripe    schedule 26.12.2018

Этот метод будет регистрировать все пути в вашем json верхнего уровня, у которых есть ключ, равный «ключу»

        var keys = jobject.Properties().Where(p => p.Name == key).ToList();

        keys.ForEach(i => Console.WriteLine(i.Path));

Это НЕ будет работать рекурсивно, но отсюда легко выполнить рекурсивный поиск.

person Rakiah    schedule 26.12.2018

вы можете использовать

JObject o = JObject.Parse(<yourjson>);
dynamic obj = o.SelectTokens("$..Product");
person Derviş Kayımbaşıoğlu    schedule 26.12.2018