JSON.net: получить путь JToken, когда узлы имеют точку?

На JToken есть свойство Path. Но он избегает имени объекта с помощью "[' ']", если имя объекта содержит "."

  • XPATH: dir/nested_dir/file.txt
  • JSON: dir.nested_dir.['file.txt']

Есть ли другое свойство, которое будет возвращать путь в виде массива строк?

1 ответ

Решение

Нет встроенного свойства, которое делает это, но вы можете создать метод расширения, который достаточно легко делает то, что вам нужно:

public static class JsonExtensions
{
    public static string[] PathAsArray (this JToken token)
    {
        return token.AncestorsAndSelf()
                    .OfType<JProperty>()
                    .Select(p => p.Name)
                    .Reverse()
                    .ToArray();
    }
}

Тогда используйте это так:

var pathArray = token.PathAsArray();
Console.WriteLine(string.Join("/", pathArray));

Скрипка: https://dotnetfiddle.net/GOdo7t

Примечание: вышеуказанный метод расширения игнорирует любые JArrays это может быть на пути. Вам нужно будет внести коррективы в код, если вам нужно обрабатывать массивы.

Как указано здесь: /questions/11432787/jsonpath-junit-escape-simvol-dlya-tochek/11432808#11432808

Используйте скобки и кавычки вокруг вашего поля. Например, если ваше поле valid.key.with.dot

Обратитесь к нему как ['valid.key.with.dot'] и в JsonPath, попробуйте

JsonPath.read(jsonString, "$.['valid.key.with.dot']")

Проверьте это dotNetFiddle

Другие вопросы по тегам