在Python中将JSON转换为CSV,在导出字段中处理字典

在Python中将JSON转换为CSV,在导出字段中处理字典,python,json,csv,Python,Json,Csv,我正在尝试将查询的开源数据()转换为csv。我可以使用请求包访问和查询数据,如下所示: import requests import gzip import csv url = "https://data.cityofchicago.org/resource/6zsd-86xi.json" response = requests.get(url) print response.status_code if response.status_code == 200: print "Conn

我正在尝试将查询的开源数据()转换为csv。我可以使用
请求
包访问和查询数据,如下所示:

import requests
import gzip
import csv

url = "https://data.cityofchicago.org/resource/6zsd-86xi.json"
response = requests.get(url)
print response.status_code
if response.status_code == 200:
    print "Connection successful. Decoding JSON"
    data = response.json()
每行数据最多有22列,可能存在也可能不存在。如果列的数据不存在,JSON对将不存在,从而导致键错误。为了尝试解决这个问题,我使用了
csv.DictWriter
类和
field\u name
restval=None
参数:

field_names = ['id',
               'case_number',
               'date',
               'block',
               'iucr',
               'primary_type',
               'description',
               'location_description',
               'arrest',
               'domestic',
               'beat',
               'district',
               'ward',
               'community_area',
               'fbi_code',
               'x_coordinate',
               'y_coordinate',
               'year',
               'updated_on',
               'latitude',
               'longitude',
               'location'
               ]

file_name = 'open_data_test.csv.gz'
local_file = gzip.open('/tmp/' + file_name, "wb")

output = csv.DictWriter(local_file,
                    fieldnames=field_names,
                    restval=None,
                    extrasaction='ignore',
                    delimiter='|',
                    quoting=csv.QUOTE_ALL,
                    quotechar='"',
                    doublequote=True,
                    lineterminator='\n')

for row in data:
    output.writerow(row)
这将写入数据,但最后一列“位置”本身是一个包含“类型”和“坐标”的字典(例如:
“{u'type':u'Point',u'coordinates':[-87.711766,41.880909]}”
)。我只想要“坐标”数据,如果它存在的话


如果数据存在,我如何仅将此列的“坐标”部分写入输出文件?编辑
字段名称
以包括
'location'[1]
'location'['coordinates']
似乎不起作用

如果您的行具有位置数据,请将其转换为所需格式:

for row in data:
    if 'location' in row:
        row['location'] = row['location']['coordinates']
    output.writerow(row)

如果行具有位置数据,请将其转换为所需格式:

for row in data:
    if 'location' in row:
        row['location'] = row['location']['coordinates']
    output.writerow(row)

循环使用你的
dict.keys()
怎么样?如果
键=='coordinates'
那么只写
dict['coordinates']
如果行中的'location':行['location']=行['location']['coordinates']
循环使用你的
dict.keys()怎么样
如果
键=='coordinates'
则只写
命令['coordinates']
如果行中的'location':行['location']=行['location']['coordinates']