2017-11-22 1 views
1

파이썬 2에서로드 할 json 형식 문자열이 있지만 json.loads() 일 때 오류가 발생합니다. json에서 중괄호 이스케이프를 처리하는 방법

{"api":"wdetail","v":"5.0","ret":["100"],"data":{"apiStack":[{"name":"esi","value":"{\"api\":\"com.aaa.detail\",\"v\":\"1.0\",\"ret\":[\"11\"]}"}]}}

JSON 문자열 위의로드, 그것은 오류 메시지가 표시됩니다

: ValueError: Expecting , delimiter: line 1 column 87 (char 86)는, 내가 인용 표시를 제거하면 따옴표가 "value":"{\"api\"에서 중괄호 전에, JSON로드가 작동하기 때문에 즉 발견했다. 첫 번째 문자열에 대해

{"api":"wdetail","v":"5.0","ret":["100"],"data":{"apiStack":[{"name":"esi","value":{\"api\":\"com.aaa.detail\",\"v\":\"1.0\",\"ret\":[\"11\"]}}]}}

, 어떻게 그것을 지원하기 위해 json.loads을 요청할 수 있습니다. 그렇지 않으면 지루함을 하나씩 제거해야합니다.

+0

사용중인 정확한 문자열 리터럴 (MCVE가 바람직 함)을 볼 수 있습니까? 만약 당신이'r''' 문자열에 넣은 것을 감쌌다면 괜찮습니다. 실제 다른 입력에서 이것을 테스트 하시겠습니까? 아니면 수동으로 문자열을 입력 하시겠습니까? –

답변

1

당신은 당신의 첫 번째 문자열에서 "{}"을 제거하기 위해 str.replace()을 사용할 수 있습니다 : 우리가) (json.loads에 대해 이야기하고 있기 때문에하는 것은 당신이 파일을 읽고있는 것을 의미한다

new_s = s.replace('"{', '{').replace('}"', '}') # s is your first string here 
data = json.loads(new_s) 
+0

사실 그것이 작동하지만, 나는 왜 키 "값"의 가치가 시작하기 위해 인용되는지 궁금합니다. 그것은 실제 값이 아닌 문자열 값으로 간주됩니까? 이 제안은 문자열이 아닌 JSON 객체로 값을 파싱합니다. 의도하지 않은 것일 수도 있습니다. – Robin

+0

아니요, 문자열이라고 가정합니다. 문자열의 소스 또는이 스테이지 이전의 처리에서 온 것입니다. – ettanany

+0

이 문자열은 다른 출력에서 ​​가져온 것으로, 대체 문자열이 솔루션 일 수 있습니다. 하지만 문자열에 실제 값이 있으면 바꾸기가 잘못된 것입니다. –

1

. 당신이 배쉬와 놀라운 나오지

sed -i 's/"{/{/g' filename.json && sed -i 's/}"/}/g' filename.json 

으로 그렇게 할 수 있고 싶어 아주 멋진 될 경우에도 패브릭 스크립트를 사용할 수 있습니다!

+1

'json.loads'는 파일 ('.load')에 대해서는 작동하지 않지만'a \'\'str \'\', \'\' bytes \'\'또는 \'\'bytearray \'\'instance'. Python에서 JSON을 구문 분석하려면 bash 명령을 제공하면 도움이되지 않습니다. –

+1

특정 질문에서 "나는 지루함을 하나씩 제거해야합니다."라고 말할 때. 당신은 그의 소스가 file.json이고 json.loads에 전달되고 읽혀지고 invalid 문법에 대한 load() 불만이 있다는 것을 모았습니다. 파이썬 실행 전에 모든 json 파일을 수정하고 성능을 향상시키기 위해 fabric.py 스크립트를 생성하여 처리 할 수 ​​있기 때문에 왜 bash를 사용하지 않을까요 ?? – MinasA1

+0

질문 어디서나 파일을 언급하지 않습니다. JSON 파일을 읽는다면 어쨌든로드 대신'.load'를 사용하게됩니다. 파일로 작업하고 있다고 가정 할 수 없습니다. API, Python의 다른 함수 또는 다른 프로그램에서 온 것일 수 있습니다. 질문에 "JSON ** string **"이 표시됩니다. –

관련 문제