Python:JSON保存为字符串,无法将其恢复为JSON

时间:2016-08-10 15:13:16

标签: python json sqlite

我有一些JSON数据,我使用:

转换为字符串
myString = str(myJSON)

我保存到SQLite数据库中。现在,当我检索myString或多或少看起来像这样:

'{u\'foo\': False, u\'bar\': 20, u\'name\': u\'Anna\'}'

我无法回到JSON。我认为主要问题是出现了额外的u\\

我尝试过使用json.dumps和/或json.loads但没有运气。有什么建议?谢谢!

3 个答案:

答案 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.dumpsjson.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('\\', ''))