2016-11-12 41 views
0

基本上我生成一個文本文件中的JSON Terraform文件,但我不能讓它正確的方式格式化:從生成文本文件,JSON文件在Python和刪除不必要的括號

我想要的完成的Terraform文件如下所示:

{ 
    "resource": { 
    "aws_route53_record": { 

     "analytics": { 
     "name": "analytics", 
     "records": ["1.2.3.4"], 
     "ttl": "1800", 
     "type": "A" 
     }, 

     "analytics-test": { 
     "name": "analytics-test", 
     "records": ["1.2.3.4"], 
     "ttl": "300", 
     "type": "A" 
     } 
    } 
    } 
} 

這是Terraform解析json所需的格式。

所以我加載在Python的文本文件,每一個看起來像這樣線上產生一個列表的列表迭代:

records = [["analytics", "1.2.3.4", "1800", "A"],["analytics-test", "1.2.3.4", "300", "A"]] 

我的代碼生成此刻的文件看起來像這樣

我創建包含像這樣的頂級變量的字典佔位符:

json_object = {'resource': {'aws_route53_record': None}} 

然後,我通過看記錄並分配相應的值:

for each_list in data: 
    terrarecord = { 
     each_list[0]:{ 
      "name": each_list[0], 
      "type": each_list[2], 
      "ttl": each_list[1], 
      "records": [each_list[3].replace('\n', '')] 
     } 
    } 

record_holder.append(terrarecord) 

record_holder對象是一個空列表,我則用它來填補json_objects像這樣:

json_object['resource']['aws_route53_record'] = record_holder

這是什麼讓我在完成的文件是:

{ 
    "resource": { 
     "aws_route53_record": [{ 
      "analytics": { 
       "ttl": "1800", 
       "records": ["173.194.245.129"], 
       "name": "analytics", 
       "type": "A" 
      } 
     }, { 
      "analytics-test": { 
       "ttl": "300", 
       "records": ["130.211.89.168"], 
       "name": "analytics-test", 
       "type": "A" 
      } 
     }] 
    } 
} 

所以會有這樣做沒有增加額外的[]{} s表示我的小環d一個更簡單的方法OES?

回答

1

你爲什麼要創建中間列表時所需的字典?

terrarecord = {} 
for each_list in data: 
    terrarecord[each_list[0]] = { 
     "name": each_list[0], 
     "type": each_list[2], 
     "ttl": each_list[1], 
     "records": [each_list[3].replace('\n', '')] 
    } 
} 

json_object['resource']['aws_route53_record'] = terrarecord 
+0

我的愚蠢無國界。感謝您向我指出這一點。我想我在自己的代碼中迷失了方向 –