2014-02-12 2 views
3

에서 JSON 문자열을 탈출, 내장로드하는 방법이 필요 : 나는 json.loads를 사용하려고하면나는 다음과 같은 JSON 문자열을 구문 분석 할 필요가 파이썬

{"JobDescription":"{\"project\": \"1322\", \"vault\": \"qa-122\"}"}' 

을, 나는 다음과 같은 얻을 :

>>> import json 
>>> print json.loads('{"JobDescription":"{\"project\": \"1322\", \"vault\": \"qa-122\"}"}') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 365, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 381, in raw_decode 
    obj, end = self.scan_once(s, idx) 
ValueError: Expecting , delimiter: line 1 column 22 (char 21) 

다른 시스템에서 생성 된 문자열을 제어 할 수 없습니다.

답변

3

삽입 된 백 슬래시가 생성되지 않습니다. 파이썬은 이스케이프 따옴표로 \"을 해석하고 최종 문자열은 인용 포함

>>> '{"JobDescription":"{\"project\": \"1322\", \"vault\": \"qa-122\"}"}' 
'{"JobDescription":"{"project": "1322", "vault": "qa-122"}"}' 

원시 문자열을 사용하거나 슬래시 두 번 : 잘

다음
>>> r'{"JobDescription":"{\"project\": \"1322\", \"vault\": \"qa-122\"}"}' 
'{"JobDescription":"{\\"project\\": \\"1322\\", \\"vault\\": \\"qa-122\\"}"}' 
>>> '{"JobDescription":"{\\"project\\": \\"1322\\", \\"vault\\": \\"qa-122\\"}"}' 
'{"JobDescription":"{\\"project\\": \\"1322\\", \\"vault\\": \\"qa-122\\"}"}' 

이 부하 :

>>> import json 
>>> json.loads('{"JobDescription":"{\\"project\\": \\"1322\\", \\"vault\\": \\"qa-122\\"}"}') 
{u'JobDescription': u'{"project": "1322", "vault": "qa-122"}'} 
>>> 
관련 문제