2017-10-10 75 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