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