首页 > 解决方案 > python-将其中包含“和\”的返回字符串转换为dict

问题描述

我得到了一个返回的字符串值

returned_string = '{"url":"src=\"http:the_url\""}'

我想将它转换为字典类型。当我尝试 eval() 时,出现以下错误:

文件“”,第 1 行 {"url":"src="http:the_url""} ^ SyntaxError: invalid syntax

当我尝试 json.loads() 时,出现以下错误:

json.decoder.JSONDecodeError:期望','分隔符:第 1 行第 14 列(字符 13)

我知道字符串是否是这样的:

returned_string = r'{"url":"src=\"http:the_url\""}'

然后 eval() 和 json.loads() 工作。但正如值名称所表明的那样,它是一个由某个 function() 返回的字符串,所以我不能将它转换为 r'..' 或者我只是不知道如何。所以,如果有人知道如何将returned_string 转换为字典,那将非常有帮助。谢谢。

标签: python

解决方案


@Lunam,让你先看看下面在交互式终端上执行的代码。

>>> returned_string = '{"url":"src=\"http:the_url\""}'
>>> returned_string2 = '{"url":"src=\'http:the_url\'"}'
>>>
>>> json.loads(returned_string)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Users\rishi\Anaconda2\lib\json\__init__.py", line 339, in loads
  return _default_decoder.decode(s)
File "C:\Users\rishi\Anaconda2\lib\json\decoder.py", line 364, in decode
  obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:\Users\rishi\Anaconda2\lib\json\decoder.py", line 380, in raw_decode
  obj, end = self.scan_once(s, idx)
ValueError: Expecting , delimiter: line 1 column 14 (char 13)
>>>
>>> json.loads(returned_string2)
{u'url': u"src='http:the_url'"}
>>>
>>> eval(returned_string)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 1
  {"url":"src="http:the_url""}
                  ^
SyntaxError: invalid syntax
>>>
>>> eval(returned_string2)
{'url': "src='http:the_url'"}
>>>

现在,手动/实用地修改您的字符串,如下所示,即用于"""包围您的字符串,删除\'在内部使用"并尝试。

如果它不能满足您的问题,请告诉我。

import json

# returned_string = '{"url":"src=\"http:the_url\""}'
returned_string = """{"url":"src='http:the_url'"}"""

print(json.loads(returned_string))
print(eval(returned_string))

输出

{'url': "src='http:the_url'"}
{'url': "src='http:the_url'"}

推荐阅读