如何使用Python将响应以JSON格式写入文件?

3

我想将API的响应以JSON格式存储。我已经得到了以字符串形式呈现的JSON响应,并将其存储在了文件中。我该如何使它有缩进,就像在线JSON查看器应用程序中那样?还是以JSON格式呈现。

我用来存储文件的代码:

    def test_url(self):
       resp =requests.get(www.myurl.com)
       data = resp.text
       f = open("19octfile.json", "w")
       f.write(data)
       f.close()

这段代码将响应以以下格式存储到19octfile.json文件中:
{"data": [{"id":"myname","id":"123","name":"myname","user":"m3","provider":"user","region":"india"}]}

现在,我该怎么以JSON格式存储响应并缩进,这样用户在阅读时就能更容易地理解呢?
我尝试了不同的方法,但都没有成功:
        with codecs.open('data.json', 'w', 'utf8') as f:
        f.write(json.dumps(data, sort_keys=True, ensure_ascii=False))

这段代码输出结果与使用 Unicode 字符但无缩进的代码相同

       with open('17octenv71232111.json', 'w') as outfile:
           json.dump(data,outfile)
           outfile.close()

这段代码与Unicode字符和无缩进的代码产生相同的结果

请问是否有任何库可以完成格式化工作或者提供任何代码帮助。


1
你可以将缩进参数的值设置为整数。 - mad_
抱歉,请您详细解释一下,我不明白如何使用int。 - dow
1
@dow 阅读手册会更快。 - bruno desthuilliers
2个回答

5
函数 json.dumps 接受一个名为 indent 的参数。文档中说明如下:

如果 indent 是非负整数,则 JSON 数组元素和对象成员将以该缩进级别进行漂亮打印。 缩进级别为 0 或负数将仅插入换行符。 None(默认值)选择最紧凑的表示。

首先,您需要将 json 文件内容加载到 Python 对象中。 您当前的代码正在将 json 字符串传递给 json.dumps。 请使用以下代码:
j = json.loads(data)
f.write(json.dumps(j, sort_keys=True, indent=4))

这里的json.loads方法把json字符串转换为可传递给json.dumps的Python对象。


太好了!!! 谢谢你的教导!我学到了我们需要先加载然后才能按照我们的需求打印输出。 - dow

2
import json
d={"data": [{"id":"myname","id":"123","name":"myname","user":"m3","provider":"user","region":"india"}]}
print(json.dumps(d,indent=2))

写入文件
(注:保留HTML标签)
with open('17octenv71232111.json', 'w') as outfile:
   outfile.write(json.dumps(d,indent=2))

不行,我尝试过了,但是它仍然以同样的字符串段落格式出现,并且到处都有\。我需要写入文件而不是在命令提示符中打印。 - dow

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接