【发布时间】:2021-08-15 23:54:14
【问题描述】:
是否可以根据键名将字典值自定义编码为 JSON?
假设我有
mydict = {
"mylist1": ["a", "b", "c"],
"mylist2": ["a", "b", "c"],
"mylist3": ["a", "b", "c"]}
我想转储 "mylist1" 而不使用缩进,仅基于其名称,但字典的其余部分使用常规 json 编码器。所以像:
{
"mylist1": [ "a","b","c"],
"mylist2": [
"a",
"b",
"c"
],
"mylist3": [
"a",
"b",
"c"
]
}
我受到this SO question 的启发,其中使用“indicator-class”来标记 dict 条目。这也适用于我的情况,但是我的 JSON 文件被打开,内容被解析和修改,然后再次保存,因此指标类 (NoIndent) 丢失了。
如果基于键名的编码涉及太多,如果我可以转储所有列表(和数组!)而无需缩进或作为字符串,我已经很高兴了。我试过了,但没有用(自定义编码器无法启动):
class CustomEncoder(json.JSONEncoder):
def default(self, obj):
if isinstance(obj, np.ndarray):
return str(list(obj))
elif isinstance(obj, list):
return str(obj)
return json.JSONEncoder.default(self, obj)
编辑:我编辑了问题以使输入/输出更加清晰
【问题讨论】:
-
我不太明白 - 你能举个例子说明你希望输出的样子吗?
-
完成。我主要是想让我的 JSON 文件对人眼更易读,因为我有一些长长的列表,里面充满了原始数据,但在较短的列表和字典中也有有意义的信息