如何仅移除字典值括号前后的单引号以修复失效的JSON格式
问题核心
你当前的字典中NetworkInterfaces对应的值是被单引号包裹的JSON格式字符串,内部双引号被转义,直接序列化会将整个值识别为字符串,导致生成的JSON格式失效。
解决思路
不要手动删引号,容易出错,直接将被包裹的JSON字符串反序列化为Python原生对象,再做整体序列化即可得到合法JSON。
实现代码(Python)
单个指定字段处理
import json # 原始字典 raw_dict = { 'NetworkInterfaces': '[{\"AssociatePublicIpAddress\":true,\"DeleteOnTermination\":true,\"Description\":\"Primary network interface\",\"DeviceIndex\":0,\"Groups\":[\"sg-0b60a9f7e75aba4d4\"],\"Ipv6AddressCount\":0,\"Ipv6Addresses\":[],\"NetworkInterfaceId\":\"eni-0538f01e55dda59e8\",\"PrivateIpAddress\":\"172.16.18.79\",\"PrivateIpAddresses\":[{\"Primary\":true,\"PrivateIpAddress\":\"172.16.18.79\"}],\"SecondaryPrivateIpAddressCount\":0,\"SubnetId\":\"subnet-0b2e2d39e5c1a8af9\",\"InterfaceType\":\"interface\"}]' } # 将字符串类型的JSON值转为原生列表对象 raw_dict['NetworkInterfaces'] = json.loads(raw_dict['NetworkInterfaces']) # 输出合法JSON print(json.dumps(raw_dict, indent=4, ensure_ascii=False))
批量处理所有符合规则的字段
如果存在多个类似的字符串类型JSON值,可以遍历字典批量处理:
for k, v in raw_dict.items(): if isinstance(v, str): # 仅对首尾为数组/对象符号的字符串尝试反序列化 if (v.startswith(('[', '{')) and v.endswith((']', '}'))): try: raw_dict[k] = json.loads(v) except json.JSONDecodeError: # 非合法JSON格式的不处理 continue
处理后输出的合法JSON
{ "NetworkInterfaces": [ { "AssociatePublicIpAddress": true, "DeleteOnTermination": true, "Description": "Primary network interface", "DeviceIndex": 0, "Groups": [ "sg-0b60a9f7e75aba4d4" ], "Ipv6AddressCount": 0, "Ipv6Addresses": [], "NetworkInterfaceId": "eni-0538f01e55dda59e8", "PrivateIpAddress": "172.16.18.79", "PrivateIpAddresses": [ { "Primary": true, "PrivateIpAddress": "172.16.18.79" } ], "SecondaryPrivateIpAddressCount": 0, "SubnetId": "subnet-0b2e2d39e5c1a8af9", "InterfaceType": "interface" } ] }
内容的提问来源于stack exchange,提问作者Rahul Chavan
相关产品推荐
相关产品推荐

