Как напечатать целые числа в виде шестнадцатеричных строк, используя json.dumps () в Python

В настоящее время я использую следующий код для печати большой структуры данных

print(json.dumps(data, indent=4))

Я хотел бы видеть все целые числа, которые печатаются в шестнадцатеричном, а не в десятичном виде. Это возможно? Кажется, что нет способа переопределить существующий кодер для целых чисел. Вы можете предоставить значение по умолчанию только для типов, еще не обработанных классом JSONEncoder, но не можете переопределить способ кодирования целых чисел.

Я понял, что могу переопределить стандартное целочисленное поведение печати, используяsys.displayhook если бы я работал в командной строке, но я не.

Просто для справки структура данных представляет собой набор из множества слов, списков, строк, целых и т. Д. Так вот почему я пошел сjson.dumps (), Единственный другой способ, которым я могу думать об этом, - это проанализировать его самостоятельно, а затем я переписываю модуль json.

Обновить: В итоге я реализовал его с сериализацией функций, которые просто распечатывают копию исходной структуры данных со всеми целочисленными типами, преобразованными в шестнадцатеричные строки:

def odprint(self, hexify=False):
    """pretty print the ordered dictionary"""
    def hexify_list(data):
        _data = []
        for i,v in enumerate(data):
            if isinstance(v, (int,long)):
                _data.insert(i,hex(v))
            elif isinstance(v,list):
                _data.insert(i, hexify_list(v))
            else:
                _data.insert(i, val)
        return _data

    def hexify_dict(data):
        _data = odict()
        for k,v in data.items():
            if isinstance(v, (dict,odict)):
                _data[k] = hexify_dict(v)
            elif isinstance(v, (int, long)):
                _data[k] = hex(v)
            elif isinstance(v,list):
                _data[k] = hexify_list(v)
            else:
                _data[k] = v
        return _data

    if hexify:
        print(json.dumps(hexify_dict(self), indent=4))
    else:
        print(json.dumps(self, indent=4))

Спасибо за помощь. Я понимаю, что в итоге я отказываюсь от стандартного диктата, но это просто для печати, так что это прекрасно для того, что мне нужно.

Ответы на вопрос(6)

Ваш ответ на вопрос