Converting/Serializing 个包含大量值对列表的字典放入 python 中的 json 文件中

Converting/Serializing dictionaries containing a large list of value pairs into a json file in python

目前我尝试使用 json 包将数据从 ESRI shapefile (.shp) 转换为 Json 文件。

在这个过程中,我想转换一个包含很多不同点坐标的字典:

json.dumps({"Points" : coordinates}) 

列表 "coordinates" 看起来像:

[[-2244.677490234375, -3717.6876220703125], [-2252.7623006509266, -3717.321774721159], 
..., [-2244.677490234375, -3717.6876220703125]]

并包含大约数百个坐标对。

但是,当我尝试执行 json.dumps 时,出现以下错误:

[-2244.677490234375, -3717.6876220703125] is not JSON serializable

我的第一个想法是,它无法处理 decimal/float 值但是如果我执行以下仅包含两个坐标对的工作示例:

print(json.dumps({"Points" :  [[-2244.677490234375, -3717.6876220703125],
[-2244.677490234375, -3717.6876220703125]]}))

tt 有效,我没有收到错误...在这种情况下的输出是:

{"Points": [[-2244.677490234375, -3717.6876220703125], [-2244.677490234375, -3717.6876220703125]]}

我不明白为什么它不适用于我的 "coordinates"-列表。

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

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__ 可以解释为什么您认为看到的是标准列表或元组,而实际上它是自定义 class。我把一个 python fiddle 放在一起,它演示了将 pyshp 的 _Array class 提供给 json.dumps().

时的异常

要解决此问题,您应该将 coordinates.tolist() 传递给转储调用。

json.dumps({"Points" : coordinates.tolist()})