1

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

我不明白为什么它不能与我的“坐标”列表一起使用。

4

1 回答 1

0

您最常看到的错误发生在自定义类中。所以我相信你的问题与 pyshp 提供坐标值的方式有关。如果没有看到您的代码,我无法确定,但是查看 pyshp 源代码,我发现了一个在几个地方使用的 _Array 类。

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()}) 
于 2016-10-28T13:48:24.540 回答