파이썬에서 복잡한 JSON을 디코딩합니다
-
22-07-2019 - |
문제
PHP에 생성 된 JSON 객체가 있습니다.
php > $insidejson = array('foo' => 'bar','foo1' => 'bar1'); php > $arr = array('a' => array('a1'=>json_encode($insidejson))); php > echo json_encode($arr); {"a":{"a1":"{\"foo\":\"bar\",\"foo1\":\"bar1\"}"}}
그런 다음 Python을 사용하여 SimpleJson을 사용하여 Deocding을 시도합니다.
>>> import simplejson as json >>> json.loads('{"a":{"a1":"{\"foo\":\"bar\",\"foo1\":\"bar1\"}"}}')
다음 오류로 실패합니다.
Traceback (most recent call last): File "", line 1, in ? File "build/bdist.linux-i686/egg/simplejson/__init__.py", line 307, in loads File "build/bdist.linux-i686/egg/simplejson/decoder.py", line 335, in decode File "build/bdist.linux-i686/egg/simplejson/decoder.py", line 351, in raw_decode ValueError: Expecting , delimiter: line 1 column 14 (char 14)
이 JSON 객체를 파이썬으로 디코딩하는 방법은 무엇입니까? PHP와 JS는 모두 성공적으로 해독하고 다른 언어의 여러 구성 요소에서 주요 변화가 필요하기 때문에 구조를 변경할 수 없습니다.
감사!
해결책
'r'로 문자열을 접두사하여 원시 문자열로 만들어보십시오.
# Python 2.6.2
>>> import json
>>> s = r'{"a":{"a1":"{\"foo\":\"bar\",\"foo1\":\"bar1\"}"}}'
>>> json.loads(s)
{u'a': {u'a1': u'{"foo":"bar","foo1":"bar1"}'}}
Alex가 아래에서 말하는 것은 사실입니다. 슬래시를 두 배로 늘릴 수 있습니다. (그의 대답은 내가 시작했을 때 게시되지 않았습니다.) 원시 문자열을 사용하는 것이 더 단순하다고 생각합니다. 언어 기능이기 때문에 똑같은 것을 의미하고 잘못되기 어려운 언어 기능이기 때문입니다.
다른 팁
백 슬래시를 문자열에 삽입하려면 스스로 탈출해야합니다.
import simplejson as json
json.loads('{"a":{"a1":"{\\"foo\\":\\"bar\\",\\"foo1\\":\\"bar1\\"}"}}')
나는 그것을 테스트했고 표준 라이브러리에 포함 된 JSON 모듈을 사용한 것을 제외하고는 그것을 입력 한 파이썬 핸들을 잘 입력했다.import json
, 파이썬 3.1).
제휴하지 않습니다 StackOverflow