문제

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가 아래에서 말하는 것은 사실입니다. 슬래시를 두 배로 늘릴 수 있습니다. (그의 대답은 내가 시작했을 때 게시되지 않았습니다.) 원시 문자열을 사용하는 것이 더 단순하다고 생각합니다. 언어 기능이기 때문에 똑같은 것을 의미하고 잘못되기 어려운 언어 기능이기 때문입니다.

다른 팁

노력하다

아마도 Simplejson이 너무 "단순한"것일 수도 있습니다.

백 슬래시를 문자열에 삽입하려면 스스로 탈출해야합니다.

import simplejson as json
json.loads('{"a":{"a1":"{\\"foo\\":\\"bar\\",\\"foo1\\":\\"bar1\\"}"}}')

나는 그것을 테스트했고 표준 라이브러리에 포함 된 JSON 모듈을 사용한 것을 제외하고는 그것을 입력 한 파이썬 핸들을 잘 입력했다.import json, 파이썬 3.1).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top