【问题标题】:How to write the response in a file with JSON format using python?如何使用 python 将响应写入 JSON 格式的文件?
【发布时间】:2018-10-19 13:25:28
【问题描述】:

我正在尝试以 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 格式,以便用户在阅读时可以轻松理解。

我的不同尝试但徒劳无功:

        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 和没有缩进的结果相同

任何人都可以帮助我吗?是否有任何可以进行格式工作的库或任何代码来提供帮助。

【问题讨论】:

  • 你可以传递 indent 参数,其值为 int
  • 对不起,你能详细解释一下我不知道如何使用 int
  • @dow 阅读手册会更快

标签: python json file-read


【解决方案1】:

函数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 字符串转换为可以传递给json.dumps 的python 对象。

【讨论】:

  • 太棒了!!!谢谢你教我!我了解到我们需要先加载,然后只打印我们想要的要求
【解决方案2】:
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))

【讨论】:

  • 不,我试过了,但在相同的字符串段落格式与 \ 全部。我需要写入文件而不是在 cmd 提示符下打印
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-26
  • 2017-03-05
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
相关资源
最近更新 更多