env:python 2.7
当我从db读取数据时,值为{"key": "{\"subKey\":\"subValue\"}"}
。我想将它转换为json,代码是:
import json
def readValueFromDb():
return '{"key": "{\"subKey\":\"subValue\"}"}'
jsonObject = json.loads(readValueFromDb())
但是出现异常:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 339, in loads
return _default_decoder.decode(s)
File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 364, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/local/Cellar/python@2/2.7.15/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 380, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting , delimiter: line 1 column 12 (char 11)
我发现{"key": "{\"subKey\":\"subValue\"}"}
和{"key": "{"subKey":"subValue"}"}
之间没有区别。
顺便说一句,该值是一个变量,因此我无法将其更改为原始字符串,因为我发现它的工作原理如下:
import json
jsonObject = json.loads(r'{"key": "{\"subKey\":\"subValue\"}"}')
那么,如果我想将值转换为json,我该怎么办?
我尝试将'\"'
替换为'\\"'
,但却找不到'\"'
。奇怪。
答案 0 :(得分:0)
如果数据库中的数据与您描述的一样,那么您的代码示例应如下所示:
import json
def readValueFromDb():
return '{"key": "{\\"subKey\\":\\"subValue\\"}"}'
jsonObject = json.loads(readValueFromDb())
你的对象看起来像:
print(jsonObject)
{u'key': u'{"subKey":"subValue"}'}
现在,可以解析内部JSON文档。
没有&#34;原始字符串&#34;,只有&#34;原始字符串文字&#34;。它是一种在代码中表示字符串的方法。如果您这样做(使用我上面的版本):
print(readValueFromDb())
{"key": "{\"subKey\":\"subValue\"}"}
然后你就会得到你声称在数据库中的内容。
只是在切线上,为什么数据库中的数据实际上不是这样的:
{"key": {"subKey": "subValue"}}
这是存储JSON对象的更合理的方式。