2017-10-10 113 views
0

我想下面的字符串轉換與json.loads()到JSON:蟒蛇3.6未能將字符串轉換爲JSON

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

我知道,反斜槓可能會導致問題,因爲我已經看到了在類似的問題和答案。我試圖替換雙反斜槓反斜槓是這樣的:

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;要*解碼*它一個Python數據結構問題是單引號,這是無效的JSON – chepner

+2

該字符串不是有效的JSON JSON字符串不能是單引號字符串是如何生成的如果硬編碼像這個例子那樣,爲什麼不只是硬編碼列表本身? –

回答

1

您的字符串不是有效的JSON。 JSON只接受雙引號,所以你需要更換單引號targetingConditions

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

這可以讓你包裹在單引號中的一切,這意味着你沒有逃避什麼。然後,您可以使用json.loads將其作爲Python對象,或者直接將其寫入文件。您可能會發現JSON specification有用的未來,或使用預建JSON validator

+0

非常感謝你 – ylu

0

我相信你的JSON字符串是不好的,因爲我試圖解析它在JavaScript中,給了我這個錯誤

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的字符串是用雙引號括起來的,而不是單引號,所以它現在可以工作。單引號是可能的方式來表示python中的字符串,但JSON是雙引號中的唯一方法。

而且你不需要用\\爲\」是表示以雙引號替換\

+0

非常感謝 – ylu