Ключи словаря JMESPath начинаются с @Python

Программы на Python
Anonymous
Ключи словаря JMESPath начинаются с @

Сообщение Anonymous »

У меня возникли проблемы с написанием запроса JMESPath, когда некоторые из ключей моего словаря начинаются с @.
У меня есть этот код:

Код: Выделить всё

    with open('foobar.json', 'r') as fp:
data = json.load(fp)
path = jmespath.search('[].record|[?value==`a`]', data)
pp.pprint(path)
Он читает этот файл (foobar.json):

Код: Выделить всё

[
{"record":{"@type":"FOO", "value": "a"}},
{"record":{"@type":"BAR", "value": "b"}},
{"record":{"@type":"BAZ", "value": "c"}}
]
и результаты:

Код: Выделить всё

[{'@type': 'FOO', 'value': 'a'}]
как и ожидалось.
Но когда я меняю выражение на:

Код: Выделить всё

    path = jmespath.search('[].record|[?@type==`FOO`]', data)
Я получаю исключение

Код: Выделить всё

  File "/Users/msarrel/PycharmProjects/SISs/.venv/lib/python3.10/site-packages/jmespath/parser.py", line 488, in _raise_parse_error_maybe_eof
raise exceptions.ParseError(
jmespath.exceptions.ParseError: Expecting: rbracket, got: unquoted_identifier: Parse error at column 13, token "type" (UNQUOTED_IDENTIFIER), for expression:
"[].record|[?@type==`FOO`]"
^
Я попробовал несколько вариантов, в том числе:

Код: Выделить всё

    path = jmespath.search('[].record|[?\@type==`FOO`]', data)

Код: Выделить всё

    path = jmespath.search('[].record|[?\\@type==`FOO`]', data)

Код: Выделить всё

    path = jmespath.search('[].record|[?\u0040type==`FOO`]', data)
Но безуспешно.
Есть идеи?
Я не имею права избавиться от @ в ключах словаря.

Подробнее здесь: https://stackoverflow.com/questions/786 ... start-with

Вернуться в «Python»