2011-07-06 4 views
36

json.dumps()을 사용하여 Python의 JSON 문자열에 float 및 NaN이 포함 된 배열을 인코딩하려고합니다.json에서 NaN 보내기

인코딩 된 JSON 문자열이 PHP에서 성공적으로 디코딩되지 않습니다. NaN이이 문제의 원인입니까? 이 상황을 어떻게 해결할 수 있습니까?

+0

출력되는 JSON의 모습은 무엇입니까? NaN은 파이썬에서 네이티브 데이터 타입이 아니기 때문에 전혀 작동하지 않습니다. –

+4

@Daniel : 사실, 만약 당신이''float ("nan")'을 쓰면 그것을 얻을 수 있습니다. 그리고'json.dumps (float ("nan"))'호출은 당신에게 "NaN"을 준다. –

답변

29

json.dumps에는 allow_nan 매개 변수가 있으며, 기본값은 True입니다.

NaN, Infinity 및 -Infinity는 JSON의 일부가 아니지만 Javascript에서는 표준이므로 일반적으로 사용되는 확장입니다. 수신자가 처리 할 수없는 경우 allow_nan=False으로 설정하십시오. 하지만 NaN을 serialize하려고하면 ValueError가 발생합니다.

11

NaN의 유효한 JSON 기호 아니다, 아마 대신 null으로 NaN의 인코딩해야 http://json.org/

엔코더의 사양을 참조하십시오.

+0

json 인코딩 된 문자열에는 나노가 포함되어 있습니다 – shreyas

+0

수동으로 수정해야합니다. http://docs.python.org/library/json.html#basic-usage – Soren

8

에 한번 사용 simplejson : 코드의 다음

pip install simplejson 

:

import simplejson 

response = df.to_dict('records') 
simplejson.dumps(response, ignore_nan=True,default=datetime.datetime.isoformat) 

ignore_nan 플래그가 제대로 모든 NaN이를 처리 -> 널 변환

기본 플래그 수 simplejson datetimes를 올바르게 구문 분석합니다.