【问题标题】:Is it a good practice to parse a JSON response to a python dictionary?解析对 python 字典的 JSON 响应是一种好习惯吗?
【发布时间】:2018-01-30 05:50:09
【问题描述】:

我正在进行一个获取 JSON 响应的 API 调用。但是,由于响应很大而且我不需要收到所有信息,我只将所需的key:values 解析到我用来写入 CSV 文件的字典中。这是一个好习惯吗?我应该直接解析 JSON 数据来创建 CSV 文件吗?

【问题讨论】:

  • 如何在不转换为字典的情况下解析 JSON?正则表达式?子串?
  • 虽然不寻常,但在 JSON 中可以有重复的键,例如{'key': 1, 'key': 2}。在 python 字典中,您只能拥有一个这样的键,因此其中一个值将被覆盖。例如,前面的结果可能会导致{'key': 2},其中第一对项目被覆盖。 stackoverflow.com/questions/21832701/…
  • @cricket_007 我正在使用 json() 方法,然后使用键将值获取到字典中。有点像这样:r = requests.get(...)dict[key] = r.json()[key1][key2]
  • 可以做的一个优化是只调用一次r.json() 并将结果存储在一个变量中。每次调用 r.json() 时,它可能会再次解析 JSON 响应。
  • @Soviut 非常感谢。我从来没有想到过。我会立即实施。

标签: python json csv dictionary


【解决方案1】:

就像所有与性能相关的事情一样,在它成为问题之前不要费心优化。您正在做的是正常、简单的方法,所以请继续这样做,直到遇到真正的瓶颈。 “巨大的反应”是相对的事情。对于某些“巨大”响应可能是几千字节,而其他人可能认为几兆字节或数百兆字节是巨大的。

如果您确实遇到了瓶颈,您应该做的第一件事是分析您的代码,以查看实际发生性能问题的位置并尝试仅优化这些部分。不要猜测;如您所知,CSV 编写器可能表现不佳。

请记住,这些 JSON 库已经存在了很长时间,具有强大的测试覆盖率,并且已经过许多开发人员在现场的实战测试。您尝试创建的任何自定义解决方案都不会有这些。

【讨论】:

  • 感谢您的建议。实际上,我对从 JSON 获取字典有点怀疑,因为两者都使用键值对。我在想它是否是多余的。
  • JSON 是一个字符串,而不是一个对象/字典。它是数据的序列化表示,而字典是真实数据。您几乎 必须 将 JSON 解析为 dict,否则您只是在处理原始字符串。
【解决方案2】:

如果您只想将特定的键:值对写入 csv 文件,最好将 json 转换为带有选定键:值对的 python 字典并将其写入 csv 文件。

【讨论】:

  • 感谢您的回答。我会继续以这种方式开发:)
猜你喜欢
  • 1970-01-01
  • 2017-10-11
  • 2021-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 2018-05-05
  • 2019-03-06
相关资源
最近更新 更多