Python3.6无法将字符串转换为json

2024-06-28 02:17:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用json.loads():

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

我知道反斜杠可能会导致问题,正如我在类似问题和答案中看到的那样。我试过用这样的双反斜杠代替反斜杠:

^{pr2}$

以及我在类似问题的答案中发现的任何其他可思考的选择或例子。在

代码是:

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)

Tags: inpycomjsonlocallineusersappdata
2条回答

我认为您的json字符串不好,因为我试图用JavaScript解析它,并给出了这个错误

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

但是如果你把绳子改成

^{pr2}$

现在它可以工作了,因为JSON的字符串用双引号而不是单引号括起来。在python中,单引号是表示字符串的可能方式,但对于JSON,只有双引号的方法。在

也不需要用\\替换\因为\“表示双引号。在

您的字符串不是有效的JSON。JSON只接受双引号,因此需要替换targetingConditions中的单引号

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

这允许您用单引号将所有内容括起来,这意味着您不必转义任何内容。然后可以使用json.loads将其作为python对象,或者直接将其写入文件。您可能会发现JSON specification在将来很有用,或者使用预构建的JSON validator

相关问题 更多 >