将包含大量值对的字典转换/序列化为python中的json文件

时间:2016-10-28 13:09:26

标签: python json xml simplejson pyshp

目前我尝试使用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。

1 个答案:

答案 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()})