Python 3 JSON 写入 CSV 错误
Python 3 JSON writing to CSV Error
我正在尝试从 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"]])
如果您想读取 JSON 文件,您应该使用 json.load
而不是 json.dumps
:
data = json.load(inputFile)
您似乎在打开文件时仍然遇到问题。
你被告知使用 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 并找出从最上面的括号
开始解析它
我正在尝试从 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"]])
如果您想读取 JSON 文件,您应该使用 json.load
而不是 json.dumps
:
data = json.load(inputFile)
您似乎在打开文件时仍然遇到问题。
你被告知使用 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 并找出从最上面的括号
开始解析它