Cómo imprimir enteros como cadenas hexadecimales usando json.dumps () en Python

Actualmente estoy usando el siguiente código para imprimir una gran estructura de datos

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

Me gustaría ver todos los enteros que se imprimen en hexadecimal en lugar de decimal. ¿Es eso posible? Parece que no hay forma de anular el codificador existente para enteros. Solo puede proporcionar un valor predeterminado para los tipos que aún no maneja la clase JSONEncoder, pero no hay forma de anular cómo codifica enteros.

e di cuenta de que puedo anular el comportamiento predeterminado de impresión de enteros usando sys.displayhook si estaba corriendo en la línea de comando pero no lo estoy.

Solo para referencia, la estructura de datos es una mezcla de dictos, listas, cadenas, ints, etc. Así que por eso elegí json.dumps (). La única otra forma en que puedo pensar en hacerlo es analizarlo yo mismo y luego volvería a escribir el módulo json.

Actualizar Así que terminé implementándolo con funciones de serialización que solo imprimen una copia de la estructura de datos original con todos los tipos enteros convertidos en cadenas hexadecimales:

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))

Gracias por la ayuda. Me doy cuenta de que termino haciendo un odict de un dict estándar, pero es solo para imprimir, así que está bien para lo que necesito.

Respuestas a la pregunta(12)

Su respuesta a la pregunta