2017-10-10 4 views
0

내가 json.loads()를 JSON으로 다음과 같은 문자열을 변환하는 것을 시도하고 JSON으로 문자열을 변환 실패 비슷한 질문과 답변. 나는이 같은 이중 백 슬래시와 함께 백 슬래시를 교체하는 것을 시도했다 :파이썬 3.6

targetingConditions.replace('\\', '\\\\') 

내가 유사한 문제 '답변에서 발견되는 사유 옵션 또는 예를 들어 다른.

코드는 다음과 같습니다

json.loads(targetingConditions) 

출력 내가 얻을 :

Traceback (most recent call last): 
    File "C:/Users/uesr/Google Drive/SHARED/Automation project/Automations/streamrail/tests.py", line 36, in <module> 
tag_filters = json.loads(tag_filters) 
    File "C:\Users\uesr\AppData\Local\Programs\Python\Python36-32\lib\json\__init__.py", line 354, in loads 
return _default_decoder.decode(s) 
    File "C:\Users\uesr\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 339, in decode 
obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Users\uesr\AppData\Local\Programs\Python\Python36-32\lib\json\decoder.py", line 357, in raw_decode 
raise JSONDecodeError("Expecting value", s, err.value) from None 
json.decoder.JSONDecodeError: Expecting value: line 1 column 52 (char 51) 
+1

문자열을 * * (거의) JSON입니다. 당신이에 * 디코드를 원하는 *을 파이썬에 데이터 구조. 문제는 유효한 JSON이 아닌 작은 따옴표입니다. – chepner

+2

문자열이 유효한 JSON이 아니며, JSON 문자열을 작은 따옴표로 묶을 수 없습니다. 문자열이 어떻게 생성 되었습니까? 예제와 같이 하드 코딩 된 경우 목록 자체를 하드 코딩 하시겠습니까? –

답변

1

귀하의 문자열이 유효 JSON 없습니다. 당신이 당신이 아무 것도 탈출하지 않아도 의미 따옴표로 모든 것을 포장 할 수 있습니다 targetingConditions

targetingConditions = '[{"filters":[{"key":"domain","rel":"neq","values":["science.howstuffworks.com", "conduit.com", "usatoday.com"]}]}]' 

에 작은 따옴표를 교체해야합니다, 그래서 JSON은 큰 따옴표를 사용할 수 있습니다. 그런 다음 json.loads을 사용하여이 파일을 파이썬 객체로 만들거나 파일에 직접 쓸 수 있습니다. 당신은 미래에 JSON specification 유용을 찾거나 사용할 수있는 사전 구축 된 내가 자바 스크립트에서 구문 분석을 시도하고 날이 오류를 준 나는, 당신의 JSON 문자열이 나쁜 생각

+0

고맙습니다. – ylu

0

JSON validator

Uncaught SyntaxError: Unexpected token ' in JSON at position 51 
at JSON.parse (<anonymous>) 
at <anonymous>:1:6 

그러나 당신이

"[{\"filters\":[{\"key\":\"domain\",\"rel\":\"neq\",\"values\":[\"science.howstuffworks.com\", \"conduit.com\", \"usatoday.com\"]}]}]" 

에 문자열을 변경하는 경우 JSON의 문자열 대신 작은 따옴표 큰 따옴표로 둘러싸여 있기 때문에 지금은 작동합니다. 작은 따옴표는 파이썬에서 문자열을 나타낼 수 있지만 JSON의 경우에는 큰 따옴표로 묶는 유일한 방법입니다.

또한 당신은 \\의 \ "로 큰 따옴표를 나타내는입니다 함께 \를 교체 할 필요가 없습니다

+0

대단히 감사합니다. – ylu