我需要在MySQL中存储嵌套字典列表。我看到的唯一方法是将其转换为字符串并将其存储在TEXT
字段中。挑战是如何将其从字符串转换回来?
例如:
import json
val1 = {"aaa":1}
val2 = {"bbb":2}
val3 = {"ccc":3}
values = [
json.dumps(val1),
json.dumps(val2),
json.dumps(val3),
]
values_str = str(values)
values_str
#'[\'{"aaa": 1}\', \'{"bbb": 2}\', \'{"ccc": 3}\']'
现在我可以安全地将它存储在MySQL中,但是如何将其转换回原始形状。
我尝试使用.split()
,但没有正确拆分。此外,我没有在词典中添加,
,但它们会在那里,因此,
的吐口水不是一个选项
答案 0 :(得分:4)
不是将json字符串放在值列表中,只需json编码dicts列表。
values = [val1, val2, val3]
values_str = json.dumps(values)
# Then read it back
values = json.loads(values_str)
如果真的必须这样做,那么你可以这样做
import ast
values = ast.literal_eval(values_str)
values = [json.loads(item) for item in values]
答案 1 :(得分:2)
尝试泡菜模块。您可以将对象序列化为字符串,然后将它们转换回原始对象。
import pickle
val1 = {"aaa":1}
val2 = {"bbb":2}
val3 = {"ccc":3}
a = pickle.dumps((val1,val2,val3)) # pickle the objects
# "((dp0\nS'aaa'\np1\nI1\ns(dp2\nS'bbb'\np3\nI2\ns(dp4\nS'ccc'\np5\nI3\nstp6\n."
# store in sql database as string
b = pickle.loads(a) # get original objects
# ({'aaa': 1}, {'bbb': 2}, {'ccc': 3})