繁体   English   中英

错误:使用Python将TSV文件转换为JSON格式时,设置不可JSON序列化

[英]Error: Set not JSON Serializable while converting TSV File into JSON Format using Python

我想将自己拥有的TSV文件转换为JSON格式以进行映射(Google融合地图不支持在同一位置映射多个对象,因此我将其转换为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'])不可序列化JSON

我认为最后两行是错误所在。.但是出了什么问题以及如何解决?

JSON被设计为非常简单,可移植的格式; 它了解的唯一类型的值是字符串,数字,布尔值,null(如Python None ), object (如Python dict )和array (如Python list )。

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

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

由于JSON没有set类型,因此您会收到一条错误消息,告诉您set … is not JSON serializable

如果您实际上不需要将其setlist而不是list (您可能没有,如果它实际上仅包含一个元素,谁在乎它是哪种集合类型?),那么简单的答案就是更改它list

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM