如何使用python将响应写入JSON格式的文件中?

时间:2018-10-19 13:25:28

标签: python json file-read

我正在尝试以JSON格式存储来自API的响应。我得到了字符串格式的JSON响应,并存储在文件中。如我们在onlineJSONViewer应用程序中看到的,我如何制作它或使用缩进进行转换?或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格式存储,以便用户在阅读时可以轻松理解。

我不同的TRY,但徒劳无功:

        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 char和没有缩进相同

有人可以帮我吗,有没有可以做格式工作的库或任何可以帮助我的代码。

2 个答案:

答案 0 :(得分:2)

函数json.dumps接受命名参数indent。从文档中:

  

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

首先,您需要将json文件的内容加载到python对象中。您当前的代码正在将json字符串传递给json.dumps。使用以下内容:

j = json.loads(data)
f.write(json.dumps(j, sort_keys=True, indent=4))

此处json.loads函数将json字符串转换为python对象,该对象可以传递给json.dumps

答案 1 :(得分:1)

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

要写入文件

with open('17octenv71232111.json', 'w') as outfile:
   outfile.write(json.dumps(d,indent=2))