目前我尝试使用json包将数据从ESRI shapefile(.shp)转换为Json文件。
在这个过程中,我想转换一个包含很多不同点坐标的字典:
json.dumps({"Points" : coordinates})
列表“坐标”如下所示:
[[-2244.677490234375, -3717.6876220703125], [-2252.7623006509266, -3717.321774721159],
..., [-2244.677490234375, -3717.6876220703125]]
并包含大约数百个坐标对。
但是,当我尝试执行json.dumps时,出现以下错误:
[-2244.677490234375, -3717.6876220703125] is not JSON serializable
我的第一个想法是,它无法处理十进制/浮点值但是如果我执行下面只包含两个坐标对的工作示例:
print(json.dumps({"Points" : [[-2244.677490234375, -3717.6876220703125],
[-2244.677490234375, -3717.6876220703125]]}))
tt工作,我没有收到错误......在这种情况下的输出是:
{"Points": [[-2244.677490234375, -3717.6876220703125], [-2244.677490234375, -3717.6876220703125]]}
我不明白为什么它不能使用我的“坐标”-list。
答案 0 :(得分:0)
您看到的错误最常发生在自定义类中。所以我相信你的问题与pyshp提供坐标值的方式有关。我无法在不查看您的代码的情况下确定,但查看了pyshp源代码,我发现an _Array class在某些地方使用过。
class _Array(array.array):
"""Converts python tuples to lits of the appropritate type.
Used to unpack different shapefile header parts."""
def __repr__(self):
return str(self.tolist())
__repr__可能解释了为什么你认为你看到标准列表或元组,而实际上它是一个自定义类。我把一个python fiddle放在一起,在向json.dumps()提供pyshp的_Array类时演示了异常。
要解决此问题,您应该将coordinates.tolist()传递给转储调用。
json.dumps({"Points" : coordinates.tolist()})