错误:使用Python将TSV文件转换为JSON格式时,设置为not JSON Serializable

2024-10-04 11:33:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把一个TSV文件转换成JSON格式来进行映射(googlefusion-maps不支持在同一个位置映射多个对象,所以我将它转换成JSON格式来尝试Mapbox)。如果你好奇,这是我的TSV文件:

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

下面是我到目前为止对应的python代码:

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

我想最后两行就是错误所在。。但有什么问题,我该怎么解决??你知道吗


Tags: 文件inimportjsonmapdatatsv格式
1条回答
网友
1楼 · 发布于 2024-10-04 11:33:47

JSON被设计成一种非常简单、非常可移植的格式;它只理解字符串、数字、布尔值、null(如PythonNone)、objects(如Pythondict)和arrays(如Pythonlist)。你知道吗

但字典中至少有一个值是set

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

由于JSON没有set类型,因此会出现一个错误,告诉您set … is not JSON serializable。你知道吗

如果您实际上不需要它是set而不是list(您可能不需要—如果它真的只有一个元素,谁在乎它是哪种集合类型?),简单的答案是将其改为list

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

(事实上,即使在处理过程中需要将其设置为集合,在存储/交换过程中通常也不需要将其设置为集合。如果文件的使用者需要将其作为一个集合使用,则它始终可以稍后将其转换回。)

相关问题 更多 >