Python:无法将JSON文件转换为CSV

时间:2017-12-25 12:09:14

标签: python json csv

我有下面的代码,应该将JSON文件转换为CSV文件

import json
import csv

infractions = open("C:\\Users\\Alan\\Downloads\\open.json","r")
infractions_parsed = json.loads(infractions)
infractions_data = infractions_parsed['infractions']

# open a file for writing
csv_data = open('Data.csv', 'w')
# create the csv writer object
csvwriter = csv.writer(csv_data)
count = 0
for inf in infractions_data:
      if count == 0:
             header = inf.keys()
             csvwriter.writerow(header)
             count += 1
      csvwriter.writerow(inf.values())
employ_data.close()

但是,我收到此错误。这应该是什么原因?

C:\Users\Alan\Desktop>python monkeytennis.py
Traceback (most recent call last):
  File "monkeytennis.py", line 5, in <module>
    infractions_parsed = json.loads(infractions)
  File "C:\Python27\lib\json\__init__.py", line 339, in loads
    return _default_decoder.decode(s)
  File "C:\Python27\lib\json\decoder.py", line 364, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer

JSON的格式为:

  {
      "count": 666,
      "query": "righthere",
      "infractions": [{
          "status": "open",
          "severity": 2.0,
          "title": "Blah blah blah",
          "coals": [1, 1],
          "date": "2017-04-22T23:10:07",
          "name": "Joe Bloggs"
      },...

1 个答案:

答案 0 :(得分:1)

infractions是一个文件对象,无法直接传递给json.loads()。要么先读它:

infractions_parsed = json.loads(infractions.read())

或使用json.load(没有&#39; s&#39;)确实需要缓冲区。

infractions_parsed = json.load(infractions)