打印使用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))
感谢您的帮助。我意识到我最终会从一个标准字典中做出一个词,但它只是用于印刷,所以它适合我需要的东西。
[八和六角形式不容许JSON(http://tools.ietf.org/html/rfc4627#section-2.4) – jfs 2012-02-01 19:10:21
注:您的hexify _ *()函数可以松散的数据。如果你走这条路,你可以使用[类似的东西](http://ideone.com/G2DJG) – jfs 2012-02-01 21:48:06
你能解释它是如何丢失数据的吗? – Plazgoth 2012-02-01 23:15:55