JSON python漂亮打印,带有自定义编码器到文件
我希望使用json库将Python字典输出到一个文件,并设置格式,使列表显示在同一行上 我曾尝试制作一个自定义编码器,并使用我在网上找到的编码器,如以下建议: 使最终代码行为:JSON python漂亮打印,带有自定义编码器到文件,python,json,serialization,pretty-print,Python,Json,Serialization,Pretty Print,我希望使用json库将Python字典输出到一个文件,并设置格式,使列表显示在同一行上 我曾尝试制作一个自定义编码器,并使用我在网上找到的编码器,如以下建议: 使最终代码行为: import json data = {'a':1, 'b':[1,2,3,4]} with open("data.json", 'w') as f: json.dump(data, f, indent=4, cls=CustomEncoderClass) 但是,如果我尝试使用json.dump作为文件导
import json
data = {'a':1, 'b':[1,2,3,4]}
with open("data.json", 'w') as f:
json.dump(data, f, indent=4, cls=CustomEncoderClass)
但是,如果我尝试使用json.dump作为文件导出,而不是将json.dump(如上面的链接中所示)导出为字符串,那么这将失败。有没有一种方法可以使用自定义编码器,使其在我将数据导出到文件时工作?
json.dumps
与您的CustomEncoderClass
一起工作?然后,您可以使用f.write(json.dumps(…)
来编写字符串。事实上,使用json.dumps()
的方法与使用json.dump()的方法不同。请看我的另一个问题,它解决了一个类似的问题。@martineau谢谢,我能够从那篇文章中复制你的结果。但是,如果我将其从NoIndent
对象更改为任何常规列表或元组if-isinstance(obj,NoIndent)
到if-isinstance(obj,(list,tuple))
,这种方法似乎不起作用。你知道为什么会这样吗?我不太清楚您的默认函数(设置对象id格式的字符串)如何替换覆盖的默认值,该默认值似乎将所有内容都封装在iter
中。Viraj:AFAIK您无法更改json.jsonecoder
在文档中默认支持的Python类型。在不深入所有细节的情况下,我的答案中的代码基本上是通过将list
和tuple
对象包装到自定义NoIndent
包装类的实例中来解决这一问题,该类允许拦截对它们的处理,因为这不是表中的类型之一(这是jsonecoder
调用其default()
方法的唯一时间)。json.dumps
与CustomEncoderClass
一起工作?然后您可以使用f.write(json.dumps(…)
确实,使用json.dumps()
。请看我的另一个问题,它解决了一个类似的问题。@martineau谢谢,我能够复制你在那篇文章中的结果。但是,如果我将它从NoIndent
对象更改为任何常规列表或元组if isinstance(obj,NoIndent)
更改为if isinstance(obj,(list,tuple))
。知道为什么会这样吗?我不太清楚默认函数(哪个字符串格式化对象id)替换被覆盖的默认值,该默认值似乎将所有内容都封装在iter
中。Viraj:AFAIK您无法更改json.jsonecoder
在文档中默认支持的Python类型方面所做的操作。在不深入所有细节的情况下,我的答案中的代码基本上是什么解决方法是将list
和tuple
对象包装在自定义NoIndent
包装类的实例中,该包装类允许拦截对它们的处理,因为这不是表中的类型之一(这是jsonecoder
调用其default()
方法的唯一时间)。