Фильтровать документ JSON в Python, сохраняя исходную структуру пути ключа

Я хотел бы знать, существует ли существующая библиотека Python для фильтрации документов JSON по полному ключевому пути, который сохраняет исходную структуру документа. Вот пример:

Входы

d = {"a": {"b": "c", "d": "e"}, "f": [{0: 0}, {1: 1}]}
keyPaths = ["a.b", "f[1]"]

Желаемый результат

{"a": {"b": "c"}, "f": [{1: 1}]}

Самое близкое решение, которое я нашел, — это операция jmespath MultiSelect Hash. ; однако я не думаю, что он может создать полную иерархию. Например:

jmespath.search("{a: a.b, f: f[1]}", d) дает {'a': 'c', 'f': {1: 1}}

Но он не позволяет использовать a.b в качестве идентификатора keyval-expr, т. е. {a.b: a.b} недействителен. Одним из решений было бы использование хэша MultiSelect вместе с кодом для создания отсутствующей структуры для каждого пути ключа. Мне интересно, есть ли более элегантное решение.


person Ryan J McCall    schedule 04.08.2017    source источник


Ответы (1)


Используйте это выражение

{"a":{"b":a.b}, "f":f[1]}

для ввода:

{"a": {"b": "c", "d": "e"}, "f": [{0: 0}, {1: 1}]}

чтобы получить вывод:

{
  "a": {
    "b": "c"
  },
  "f": {
    "1": 1
  }
}
person Ankit Gupta    schedule 13.02.2019