2017-07-17 171 views
0

我想使用python生成下面的json文件。使用python嵌套創建Json文件

{ 
    "type": "SubInterface", 
    "MTU": 1500, 
    "enabled": "True", 
    "vlanId": vlanid, 
    "subIntfId": subinterid, 
    "name": "abc", 
    "id": "intid", 
    "managementOnly": "False", 
    "activeMACAddress":"active-mac", 
    "standbyMACAddress":"standby-mac", 
    "securityZone": { 
     "name": "Zonename", 
     "id": "securityid", 
     "type": "SecurityZone" 
    }, 
    "ifname": "interface-name", 
    "ipv4": { 
     "static": { 
     "address": ipv4address, 
     "netmask": "ipv4subnet" 
     } 
    }, 
    "ipv6": { 
     "enableIPV6": "True", 
     "addresses": [ 
     { 
      "address": ipv6address, 
      "prefix": "ipv6prefix", 
      "enforceEUI64": "False" 
     } 
     ] 

    } 
    } 

這裏是我的代碼 -

import json 
data={} 

data["type"]="Subinterface" 
data["MTU"]="1500" 
data["enabled"]= "True" 
data["vlanId"]="vlanid" 
data["subIntfId"]="subinterid" 
data["name"]= "Port-channel24" 
data["id"]= "intid" 
data["managementOnly"]= "False" 
data["activeMACAddress"]="active-mac" 
data["standbyMACAddress"]="standby-mac" 
data['securityZone']=[] 
data['securityZone'].append({ 
     "name": "Zonename", 
     "id": "securityid", 
     "type": "SecurityZone" 
    }) 
data["ifname"]="interface-name" 
data['ipv4']=[] 
data['ipv4'].append({ 
data["static"]=[] 
data["static"].append({ 
      "address": "ipv4address", 
      "netmask": "ipv4subnet" 
      }) 
    }) 

with open('data1.txt', 'w') as outfile: 
    json.dump(data, outfile) 

在執行它給了我下面的錯誤 -

automation) -bash-4.1$ python json23.py 
    File "json23.py", line 23 
    data["static"]=[] 
       ^
SyntaxError: invalid syntax 

如何生成嵌套值JSON

+0

「ipv4」和「static」根據您的規格未列出。 – Grimmy

回答

0

這是因爲你有前一行未結案括號:data['ipv4'].append({。如果你關閉這些括號,你應該都很好。

0

問題是與此塊:

data['ipv4']=[] 
data['ipv4'].append({ 
data["static"]=[] 
data["static"].append({ 
      "address": "ipv4address", 
      "netmask": "ipv4subnet" 
      }) 
    }) 

這樣評論所指出的,你需要的輸出沒有列出ipv4static。我懷疑你想要閱讀:

data['ipv4'] = { 
    "static": { 
     "address": "ipv4address", 
     "netmask": "ipv4subnet" 
    } 
} 

或者,如果你堅持在方括號(雖然我不知道你爲什麼會):

data['ipv4'] = {} 
data['ipv4']['static'] = {} 
data['ipv4']['static']['address'] = 'ipv4address' 
data['ipv4']['static']['netmask'] = 'ipv4subnet' 

其他一些注意事項:

  1. 你不需要初始化一個空的列表,然後append它 - 你可以用你想要的值初始化列表。
  2. 我建議直接初始化這個dict,而不是像這樣動態構建它,在可能的情況下更可取。