【问题标题】:Python 3 JSON writing to CSV ErrorPython 3 JSON 写入 CSV 错误
【发布时间】:2017-12-01 02:41:40
【问题描述】:

我正在尝试从 JSON 格式的数据中写出一个 csv 文件。我可以获取要写入 csv 文件的字段名,但不能获取我需要的项目值。这是我第一次在 python 中编码,所以任何帮助将不胜感激。 json文件可以在下面找到以供参考:

https://data.ny.gov/api/views/nqur-w4p7/rows.json?accessType=DOWNLOAD

这是我的错误:

Traceback (most recent call last):
  File "ChangeDataType.py", line 5, in <module>
    data = json.dumps(inputFile)
  File "/usr/lib64/python3.4/json/__init__.py", line 230, in dumps
    return _default_encoder.encode(obj)
  File "/usr/lib64/python3.4/json/encoder.py", line 192, in encode
    chunks = self.iterencode(o, _one_shot=True)
  File "/usr/lib64/python3.4/json/encoder.py", line 250, in iterencode
    return _iterencode(o, 0)
  File "/usr/lib64/python3.4/json/encoder.py", line 173, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: <_io.TextIOWrapper name='rows.json?accessType=DOWNLOAD' mode='r' encoding='UTF-8'> is not JSON serializable

这是我的代码:

import json
import csv

inputFile = open("rows.json?accessType=DOWNLOAD", "r")
data = json.dumps(inputFile)

with open("Data.csv","w") as csvfile:

    writer = csv.DictWriter(csvfile, extrasaction='ignore', fieldnames=["date", "new_york_state_average_gal", "albany_average_gal", "binghamton_average_gal",\
 "buffalo_average_gal", "nassau_average_gal", "new_york_city_average_gal", "rochester_average_gal", "syracuse_average_gal","utica_average_gal"])

    writer.writeheader()

    for row in data:
        writer.writerow([row["date"], row["new_york_state_average_gal"], row["albany_average_gal"], row["binghamton_average_gal"],\
                         row["buffalo_average_gal"], row["nassau_average_gal"], row["new_york_city_average_gal"], row["rochester_average_gal"], row["syracuse\
_average_gal"],row["utica_average_gal"]])

【问题讨论】:

  • dumps 用于导出 json。您正在尝试导入它 - 使用 loads
  • @Shadow 这就是我最初的样子,但它返回的 JSON 必须是字符串而不是 'TextI0Wrapper'
  • load 没有 s,s 是当您从字符串而不是文件加载时。
  • 因为您传递的是文件指针而不是文件的内容。如果您打算这样做,请尝试json.load
  • 查询参数不是必须的。 data.ny.gov/api/views/nqur-w4p7/rows.json 并且 csv 没有字符串或整数之间的信息,但您应该接受下面的答案,然后创建一个新帖子询问您的下一个问题

标签: python json export-to-csv


【解决方案1】:

如果你想读取 JSON 文件,你应该使用 json.load 而不是 json.dumps

data = json.load(inputFile)

【讨论】:

    【解决方案2】:

    您似乎在打开文件时仍然遇到问题。 Python json to CSV

    你被告知使用json.load

    dumps 将对象转换为字符串。您想将 JSON 读入字典

    因此你需要load这个JSON文件,你可以同时打开两个文件

    with open("Data.csv","w") as csvfile, open("rows.json?accessType=DOWNLOAD") as inputfile:
        data = json.load(inputfile)
        writer = csv.DictWriter(csvfile,...
    

    另外,例如,考虑到 JSON 数据看起来像 "fieldName" : "syracuse_average_gal",这是 Syracuse 平均值的唯一出现,row["syracuse_average_gal"] 不正确。

    仔细检查你的 JSON 并找出从最上面的括号开始解析它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-12-28
      • 2016-06-30
      • 2014-06-30
      • 2019-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-18
      相关资源
      最近更新 更多