在Python中序列化带换行符的JSON文件

5 投票
2 回答
4153 浏览
提问于 2025-04-15 21:45

我有时候会用json和jsonpickle把对象保存到文件里,使用下面这个函数:

def json_serialize(obj, filename, use_jsonpickle=True):
    f = open(filename, 'w')
    if use_jsonpickle:
    import jsonpickle
    json_obj = jsonpickle.encode(obj)
    f.write(json_obj)
    else:
    simplejson.dump(obj, f) 
    f.close()

问题是,如果我把一个字典用“json_serialize(mydict, myfilename)”这个方法保存下来,结果整个内容就会挤在一行里。这就导致我不能像查看CSV文件那样,方便地用grep命令在文件里查找内容。有没有办法让每个对象的元素(比如字典里的每一项,或者列表里的每一个元素)在JSON输出文件中单独占一行呢?

谢谢。

2 个回答

5

(simple)json.dump() 这个函数有一个叫 indent 的参数。jsonpickle 可能也有类似的功能,或者如果没有的话,你可以先把数据解码,然后再重新编码一次。

6

Jsonpickle使用了一种json的后端,所以你可以在你的代码中试试这个:

jsonpickle.set_encoder_options('simplejson', sort_keys=True, indent=4)

更新:simplejson已经被合并到基础的python中了,只需要把simplejson替换成json,这样你就能得到格式化的、好看的json,而不是压缩过的那种。

jsonpickle.set_encoder_options('json', sort_keys=True, indent=4)

撰写回答