2016-10-28 9 views
1

현재 json 패키지를 사용하여 ESRI shapefile (.shp)의 데이터를 Json 파일로 변환하려고합니다. 이 과정에서 큰 값 목록을 포함하는 사전을 파이썬의 json 파일로 변환

, 내가 다른 지점의 많은의 좌표가 포함 된 dictionairy 변환 할 :

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]]} 
,536,

"좌표"목록과 함께 작동하지 않는 이유가 없습니다.

답변

0

가장 일반적인 오류는 사용자 지정 클래스에서 발생합니다. 그래서 당신의 문제는 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__ 설명 할 수 있습니다. json.dumps()에 pyshp의 _Array 클래스를 제공 할 때 예외를 나타내는 python fiddle을 함께 사용했습니다.

이 문제를 해결하려면 coordinates.tolist()를 덤프 호출에 전달해야합니다.

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

대단히 감사합니다! 이제는 작동하고 있지만 이전 프로 플럼을 완전히 이해하지 못했습니다 ... 내 좌표는 실제로 목록이었습니다. 그래서 .tolist()를 적용하려고 시도했을 때 목록에 메서드가 없으므로 오류가 발생했습니다. tolist(). 그래서 목록을 numpy 배열로 변환했습니다.이 목록은 .tolist()를 사용하여 목록으로 다시 변환되었습니다 ... 그리고 이상하게도 이제는 작동 중입니다 .-D – Jannik

+0

Ah 우수합니다. 분명히 객체에 관한 몇 가지 문제가있었습니다 ... 나는 우리가 결코 알 수 없을 것 같아요 :) – craigts

+0

BTW 나는 100 % 확신 할 수없는 배열의 목록을 가지고 있다고 생각합니다. 또한 광산을 답으로 표시하는 것을 잊지 마십시오. – craigts