понимание object_pairs_hook в json.loads () - PullRequest
0 голосов
/ 04 февраля 2019

В документации здесь - https://docs.python.org/3/library/json.html

говорится о object_pairs_hook:

object_pairs_hook - необязательная функция, которая будет вызываться с результатом декодирования любого литерала объектас упорядоченным списком пар.Возвращаемое значение object_pairs_hook будет использоваться вместо dict.Эта функция может быть использована для реализации пользовательских декодеров.Если object_hook также определен, то object_pairs_hook имеет приоритет.

Есть один довольно впечатляющий пример этого в этом ответе .

Я не понимаю, что«крючок» или как работает эта функция.Документы действительно не объясняют это очень четко.Я хотел бы написать один сейчас (иначе это будет путаница строковых методов в строке, которую я анализирую)

Кто-нибудь знает учебник по этой функции или понимает его достаточно хорошо, чтобы подробно объяснить, как онработает?В документах они, кажется, предполагают, что вы знаете, что происходит в черном ящике json.loads()

1 Ответ

0 голосов
/ 04 февраля 2019

Позволяет вам настраивать, в какие объекты будет разбираться ваш JSON.Для этого конкретного аргумента (object_pairs_hook) он предназначен для пары (считывает пары ключ / значение объекта сопоставления).

Например, если эта строка появляется в вашем JSON:

{"var1": "val1", "var2": "val2"}

Itвызовет вашу функцию, на которую указывает указанная ниже аргумент:

[('var1', 'val1'), ('var2', 'val2')]

Что бы функция не возвращала, это будет то, что будет использовано в результирующей проанализированной структуре, в которой была приведенная выше строка.

Тривиальный примерis object_pairs_hook=collections.OrderedDict, который гарантирует, что ваши ключи будут упорядочены так же, как они были во входящей строке.

Общая идея перехвата состоит в том, чтобы позволить вам зарегистрировать функцию, которая вызывается (назад)по мере необходимости для данной задачи.В этом конкретном случае он позволяет настроить декодирование (различных типов объектов) входящей строки JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...