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



我正在尝试将查询的开源数据(此处供参考)转换为CSV。我可以使用requests软件包访问和查询数据,如下所示:

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对,从而导致KeyErrors。要尝试解决此问题,我正在使用csv.DictWriter类和field_namesrestval=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)

这将写入数据,但是最后一列"位置"本身是包含"类型"one_answers"坐标"的字典(例如:"{u'type': u'Point', u'coordinates': [-87.711766, 41.880909]}")。我只需要"坐标"数据,如果存在。

如果存在数据,我只能将本列的"坐标"部分写入输出文件?编辑field_names包含'location'[1]'location'['coordinates']似乎不起作用。

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

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

最新更新