我有一個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中的選項卡,是否通過打印字典/數據本身進行驗證? –