Attualmente sto usando il seguente codice per stampare una grande struttura di datiCome stampare interi come stringhe esadecimali utilizzando json.dumps() in Python
print(json.dumps(data, indent=4))
mi piacerebbe vedere tutti gli interi che vengono stampati in esadecimale invece di decimale. È possibile? Sembra che non ci sia modo di sovrascrivere il codificatore esistente per i numeri interi. È possibile fornire un valore predefinito solo per tipi non già gestiti dalla classe JSONEncoder, ma non è possibile sovrascrivere il modo in cui codifica gli interi.
Ho scoperto che è possibile ignorare il comportamento di stampa dei numeri interi predefinito utilizzando sys.displayhook se ero in esecuzione nella riga di comando, ma non lo sono.
Solo per riferimento la struttura dati è un miscuglio di dit, elenchi, stringhe, int, ecc. Ecco perché sono andato con lo json.dumps(). L'unico altro modo in cui posso pensare di farlo è analizzarlo da solo e quindi dovrei riscrivere il modulo JSON.
Aggiornamento: Così ho finito per la sua attuazione con funzioni che solo stampare una copia della struttura dati originale con tutti i tipi interi convertite in stringhe esadecimali serializzazione:
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))
Grazie per l'aiuto. Mi rendo conto che finisco per fare un odetto da un dettato standard, ma è solo per la stampa, quindi va bene per quello che mi serve.
[Le forme ottale e esadecimale non sono consentite in JSON] (http://tools.ietf.org/html/rfc4627#section-2.4) – jfs
nota: le funzioni hexify _ *() possono perdere dati. Se segui questa strada puoi usare [qualcosa di simile] (http://ideone.com/G2DJG) – jfs
Puoi spiegare come può perdere i dati? – Plazgoth