我有一个python脚本下面加载yaml文件。参数以列表的形式传入,因此我可以通过循环来向字典中添加值。下面的代码添加了参数,但是json格式不正确,显示在当前和期望的json结果中。任何帮助正确的方向表示赞赏。谢谢。python字符串到json转换
YAML文件
policies:
- name: ec2age
resource: ec2
filters:
- State.Name: running
- "tag:ResourceCreatedBy": present
- and:
- type: instance-age
days: 30
op: ge
Python脚本:
#!/usr/bin/python
import sys
import argparse
import json
import yaml
parser = argparse.ArgumentParser()
parser.add_argument("-y", "--yaml_file", type=str)
parser.add_argument("-b", "--business_unit", type=str)
parser.add_argument("-p", "--platform", type=str)
parser.add_argument("-c", "--client", type=str)
args = parser.parse_args()
with open(args.yaml_file, 'r') as stream:
data = yaml.load(stream)
inner_dict = [args.business_unit, args.platform, args.client]
for item in list(inner_dict):
data['policies'][0]['filters'][0]['tag:BUSINESS_UNIT'] = args.business_unit
data['policies'][0]['filters'][1]['tag:PLATFORM'] = args.platform
print json.dumps(data)
当前结果:
{
"policies": [
{
"resource": "ec2",
"name": "ec2age",
"filters": [
{
"tag:BUSINESS_UNIT": "TEST_FLITE",
"State.Name": "running"
},
{
"tag:ResourceCreatedBy": "present"
},
{
"and": [
{
"type": "instance-age",
"days": 30,
"op": "ge"
}
]
}
]
}
]
}
所需的结果:
{
"policies": [
{
"resource": "ec2",
"name": "ec2age",
"filters": [
{
"tag:BUSINESS_UNIT": "TEST_FLITE"
},
{
"tag:PLATFORM": "Android"
},
{
"State.Name": "running"
},
{
"tag:ResourceCreatedBy": "present"
},
{
"and": [
{
"type": "instance-age",
"days": 30,
"op": "ge"
}
]
}
]
}
]
}
它可以isssue与YAML,不看YAML似乎很难说。 您可以验证YAML中的选项卡,是否通过打印字典/数据本身进行验证? –