【问题标题】:How to convert list of nested dictionaries into string and vice versa如何将嵌套字典列表转换为字符串,反之亦然
【发布时间】:2013-10-29 16:37:45
【问题描述】:

我需要在 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(),但没有正确拆分它。我也没有在字典中包含,,但它们会在那里,所以, 吐痰不是一种选择

【问题讨论】:

    标签: python mysql string list dictionary


    【解决方案1】:

    不是将 json 字符串放在 values 列表中,而是将 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]
    

    【讨论】:

    • 你说的太对了!我现在很惭愧,问这个问题=)
    【解决方案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})
    

    【讨论】:

      猜你喜欢
      • 2012-05-01
      • 2011-05-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多