2015-05-22 2 views
0

Я ищу для преобразования TSV-файла, который у меня есть в формате JSON для сопоставления (карты Google google не поддерживают отображение нескольких объектов в одном и том же месте Я конвертирую его в формат JSON, чтобы использовать Mapbox). Вот мой файл TSV, если вам интересно:Ошибка: установите JSON Serializable при преобразовании TSV-файла в формат JSON с использованием Python

https://github.com/yongcho822/Movies-in-the-park/blob/master/MovieParksGeocodeTest.tsv

А вот мой соответствующий питон код до сих пор:

import json 
import csv 

def create_map(datafile): 
    geo_map = {"type":"FeatureCollection"} 
    item_list = [] 
    with open(datafile, 'r') as tsvfile: 
     reader = csv.DictReader(tsvfile, delimiter = '\t') 

     for i, line in enumerate(reader): 
      data = {} 
      data['type'] = 'Feature' 
      data['id'] = i 
      data['properties']={'title': line['Movie Title'], 
           'description': line['Amenities'], 
           'date': line['Date']} 
      data['name'] = {line['Location']} 
      data['geometry'] = {'type':'Point', 
           'coordinates':(line['Lat'], line['Lng'])} 
      item_list.append(data) 
     #print item_list 
     for point in item_list: 
      geo_map.setdefault('features', []).append(point) 
     print 'CHECKPOINT' 
     with open("thedamngeojson.geojson", 'w') as f: 
      f.write(json.dumps(geo_map)) 

create_map('MovieParksGeocodeTest.tsv') 

Это бросает мне ошибку в конце (после того, как он печатает CHECKPOINT) , заявив, что

TypeError: set(['Edgebrook Park, Chicago ']) is not JSON serializable

Я изображаю последние две строки, где ошибка .. но что не так и как исправить?

ответ

1

JSON предназначен для очень простого, очень портативного формата; единственными видами значений, которые он понимает, являются строки, числа, booleans, null (например, Python None), object s (например, Python dict) и array s (например, Python list).

Но по крайней мере один из значений в словаре является set:

data['name'] = {line['Location']} 

Поскольку JSON не имеет set типа, вы получите сообщение об ошибке говорит вам, что set … is not JSON serializable.

Если вы на самом деле не потребность это будет set вместо list (который вы, вероятно, не-если это действительно только когда-либо один элемент, который ухаживает, какой тип коллекции это?), То ответ прост, чтобы изменить его, чтобы быть list:

data['name'] = [line['Location']] 

(на самом деле, даже если вы сделать нужно, чтобы это набор во время обработки, вы обычно не нужно быть набор во время хранения/interchange. Если потребитель вашего файла должен использовать его как набор, он всегда может преобразовать его позже.)

Смежные вопросы