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

dow*_*dow 3 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()
Run Code Online (Sandbox Code Playgroud)

此代码以以下格式将响应存储在 19octfile.json 中:

{"data": [{"id":"myname","id":"123","name":"myname","user":"m3","provider":"user","region":"india"}]}
Run Code Online (Sandbox Code Playgroud)

现在,我如何以 JSON 格式存储带有缩进的响应,以便用户在读取时可以轻松理解。

我的不同尝试但徒劳:

        with codecs.open('data.json', 'w', 'utf8') as f:
        f.write(json.dumps(data, sort_keys=True, ensure_ascii=False))
Run Code Online (Sandbox Code Playgroud)

此代码给出与 unicode 字符相同的结果,没有缩进

       with open('17octenv71232111.json', 'w') as outfile:
           json.dump(data,outfile)
           outfile.close()
Run Code Online (Sandbox Code Playgroud)

此代码与 unicode char 的结果相同且没有缩进

任何人都可以帮助我是否有任何库可以完成格式工作或任何代码来提供帮助。

pti*_*rno 5

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

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

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

j = json.loads(data)
f.write(json.dumps(j, sort_keys=True, indent=4))
Run Code Online (Sandbox Code Playgroud)

这里json.loads函数将 json 字符串转换为可以传递给 的 python 对象json.dumps