【发布时间】:2021-09-16 07:32:36
【问题描述】:
我有一个类似字符串的字典,如下所示:
str = "Access AR1:\n\tTargets: \n\t\tManagement Name:csw_1\n\t\tObject Name:csw_obj_1\n\t\tdetails:103\n\t\tManagement Name:csw_123\n\t\tObject Name:csw_obj_134\n\t\tdetails:123\n\tSources: \n\t\tIP:10.20.30.40\n\t\tSubnet Mask:255.255.255.255\nAccess AR2:\n\tTargets: \n\t\tManagement Name:csw_2\n\t\tObject Name:csw_obj_2\n\t\tdetails:110\n\t\tManagement Name:csw_431\n\t\tObject Name:csw_obj_21\n\t\tdetails:134\n\tSources: \n\t\tIP:10.20.10.10\n\t\tSubnet Mask:255.255.255.192"
这以相同的格式进行,如下所示:
Access AR1:
Targets:
Management Name:csw_1
Object Name:csw_obj_1
details:103
Management Name:csw_123
Object Name:csw_obj_134
details:123
Sources:
IP:10.20.30.40
Subnet Mask:255.255.255.255
Access AR2:
Targets:
Management Name:csw_2
Object Name:csw_obj_2
details:110
Management Name:csw_431
Object Name:csw_obj_21
details:134
Sources:
IP:10.20.10.10
Subnet Mask:255.255.255.192
这需要改为:
str = {"Access AR1": { "Targets": [{"Management Name:csw_1", "Object Name":"csw_obj_1", "details":"103"}, {"Management Name:csw_123", "Object Name":"csw_obj_134", "details":"123"}]
"Sources": {"IP":"10.20.30.40", "Subnet Mask": "255.255.255.255"}
},
"Access AR2": { "Targets": [{"Management Name:csw_2", "Object Name":"csw_obj_2", "details":"110"}, {"Management Name:csw_431", "Object Name":"csw_obj_21", "details":"133"}]
"Sources": {"IP":"10.20.10.10", "Subnet Mask": "255.255.255.192"}
}
}
我尝试了ast.literal_eval, eval,结果出现错误。
【问题讨论】:
-
您能否分享您打算将字符串转换为字典的代码和错误?
-
@DiesanRomero 我使用了 ast.literal_eval(str),它会在给定的字符串空间中引发语法错误并且缺少引号
-
要使用 ast.literal_eval 字符串需要在括号内。这个方法的作用是评估一个字符串,就好像它是一个 Python 表达式一样。如果您想将该字符串转换为字典,我可以为您提供一些选项。顺便说一句,只是好奇这个字符串是从哪里来的,为什么要使用这种格式?
-
"Sources":"IP":"10.20.30.40" 这不能是 dict 。更正这一行,然后我可以给你从输入输出的代码
-
@BahaeElHmimdi 它的错误,现在编辑
标签: python json dictionary