我有一些JSON数据,我使用:
转换为字符串myString = str(myJSON)
我保存到SQLite数据库中。现在,当我检索myString
或多或少看起来像这样:
'{u\'foo\': False, u\'bar\': 20, u\'name\': u\'Anna\'}'
我无法回到JSON。我认为主要问题是出现了额外的u\
和\
。
我尝试过使用json.dumps
和/或json.loads
但没有运气。有什么建议?谢谢!
答案 0 :(得分:5)
您可以使用ast.literal_eval来恢复字典。
import ast
original = {'foo': False, 'bar': 20, 'name': 'Anna'}
dict_string = str(original)
print original == dict_string # False
print original == ast.literal_eval(dict_string) # True
也就是说,如果需要将字典存储为字典化,那么将来应该使用类似json.dumps
和json.loads
的内容来存储和检索字典。将字典直接转换为字符串通常不是一件好事。
答案 1 :(得分:1)
你没有JSON。你有一本Python字典。
如果你有JSON,你不需要将它转换为字符串,因为它已经是一个。但是,正如db值所示,您实际执行的操作是将dict直接转换为字符串。
不要做任何这些。如果您实际上正在某处接收JSON,那么在将其写入数据库之前,您不应该将其解析为dict。如果您以编程方式创建此dict,则应在保存之前通过json.dumps(my_data)
将其转换为字符串。
答案 2 :(得分:0)
正如@Karin所说,你的字符串不是JSON,那就是说,你应该直接使用myJSON
使用var dict
(这个var 应该是{{1}像这样:
myJSON = {'foo': False,
'bar': 20,
'name': 'Anna'}
with open('foo.json', 'w') as f:
json.dump(myJSON, f)
现在,要删除字符串中的\
字符,只需使用json.dump()
。
例如:
import ast
json_dict = ast.literal_eval(myString.replace('\\', ''))