Skip to main content
 首页 » 编程设计

python之将字符串转换为dicts python列表的列表

2025年05月04日20mfryf

我是 python 新手。我有一个从我的 sqlite 数据库中获取的字符串。我想将字符串转换为 list of list of dicts。我尝试了 ast 和 json 库,但都失败了。

这是字符串:

a = '"[[{"plugin_type":"input","plugin":"mysql","dbname":"smackcoders","user":"root","password":"root","tbname":"agg_csv","host":"localhost","id":"mysql1","limit_count":5},{"plugin_type":"filter","plugin":"metrics","input_from":"mysql1","id":"metrics","field_name":"count_result", "field":"state","value":"kerala","action":"count","send_data_immediately":True},{"plugin_type":"output","plugin":"elastic","id":"elastic_search","input_from":"metrics","ind":"neww10","doc_typ":"sm23"}]]"' 

这里是我试过的代码:

import ast 
import json 
a = '"[[{"plugin_type":"input","plugin":"mysql","dbname":"smackcoders","user":"root","password":"root","tbname":"agg_csv","host":"localhost","id":"mysql1","limit_count":5},{"plugin_type":"filter","plugin":"metrics","input_from":"mysql1","id":"metrics","field_name":"count_result", "field":"state","value":"kerala","action":"count","send_data_immediately":True},{"plugin_type":"output","plugin":"elastic","id":"elastic_search","input_from":"metrics","ind":"neww10","doc_typ":"sm23"}]]"' 
a = a.replace("[[","[").replace("]]","]") 
print(a) 
 
# using json library- fails 
# jdata = json.loads(a) 
# for d in jdata: 
#     for key, value in d.iteritems(): 
#         print (key, value) 
 
#using ast library - it also fails 
# res = [ast.literal_eval(x) for x in a] 

我试过这个链接 convert string to dict和 convert str to list of list

但在我的例子中,我有一个字符串形式的 list of list of dicts。如何让它成为可能。

我想要与输出相同的内容,但它应该在字典列表中。

要求的输出:

[[{"plugin_type":"input","plugin":"mysql","dbname":"smackcoders","user":"root","password":"root","tbname":"agg_csv","host":"localhost","id":"mysql1","limit_count":5},{"plugin_type":"filter","plugin":"metrics","input_from":"mysql1","id":"metrics","field_name":"count_result", "field":"state","value":"kerala","action":"count","send_data_immediately":True},{"plugin_type":"output","plugin":"elastic","id":"elastic_search","input_from":"metrics","ind":"neww10","doc_typ":"sm23"}]] 

请您参考如下方法:

这应该有效。

import ast 
a = '"[[{"plugin_type":"input","plugin":"mysql","dbname":"smackcoders","user":"root","password":"root","tbname":"agg_csv","host":"localhost","id":"mysql1","limit_count":5},{"plugin_type":"filter","plugin":"metrics","input_from":"mysql1","id":"metrics","field_name":"count_result", "field":"state","value":"kerala","action":"count","send_data_immediately":True},{"plugin_type":"output","plugin":"elastic","id":"elastic_search","input_from":"metrics","ind":"neww10","doc_typ":"sm23"}]]"' 
 
print(ast.literal_eval(a.strip('"'))) 

输出:

[[{'dbname': 'smackcoders', 
   'host': 'localhost', 
   'id': 'mysql1', 
   'limit_count': 5, 
   'password': 'root', 
   'plugin': 'mysql', 
   'plugin_type': 'input', 
   'tbname': 'agg_csv', 
   'user': 'root'}, 
  {'action': 'count', 
   'field': 'state', 
   'field_name': 'count_result', 
   'id': 'metrics', 
   'input_from': 'mysql1', 
   'plugin': 'metrics', 
   'plugin_type': 'filter', 
   'send_data_immediately': True, 
   'value': 'kerala'}, 
  {'doc_typ': 'sm23', 
   'id': 'elastic_search', 
   'ind': 'neww10', 
   'input_from': 'metrics', 
   'plugin': 'elastic', 
   'plugin_type': 'output'}]]