目前我使用以下代码来打印大型数据结构
print(json.dumps(data, indent=4))
Run Code Online (Sandbox Code Playgroud)
我想看到以十六进制而不是十进制打印的所有整数.那可能吗?似乎没有办法覆盖现有的整数编码器.您只能为尚未由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: …
Run Code Online (Sandbox Code Playgroud)