如何以特定顺序从json文件中检索值?

时间:2018-02-09 11:48:21

标签: python json

我是python的新手。我正在编写代码,我需要读取json文件,并将其中的一些数据转储到新的json文件中。 以下是我的代码:

if vmName=='IGW':
    with open(APIJSONPath+NwIntfJSONFileName) as f:
        data=json.load(f)

    for item in data['Interfaces']:
        jdata=item
    with open(NwIntfJSONPath+vmName+'.json','w') as c:
        json.dump(jdata,c,indent=2)

以下是我的json文件数据的一小部分,该代码应该从中检索eth0和eth1的接口详细信息(接口名称,IPAddress,PrefixLength,DefaultGateway):

{
    "Interfaces": [{
                    "Name": "eth0",
                    "IPConfigurations": [{
                            "IPAddress": "10.0.3.7",
                            "PrefixLength": 24,
                            "DefaultGateway": "10.0.3.1",
                            "IsPrimary": true
                    }],
                    "Description0": "connected to cloudsimple network",
                    "IsPrimary": true
           } ,
            {
                    "Name": "eth1",
                    "IPConfigurations": [{
                            "IPAddress": "10.0.3.8",
                            "PrefixLength": 24,
                            "DefaultGateway": "10.0.3.1",
                            "IsPrimary": true
                    }],
                    "Description1": "connected to internet"
            }
      ]
}

但是转储新json文件的数据是:

{
  "Name": "eth1",
  "IPConfigurations": [
    {
      "PrefixLength": 24,
      "IsPrimary": true,
      "IPAddress": "10.0.3.8",
      "DefaultGateway": "10.0.3.1"
    }
  ],
  "Description1": "connected to internet"
}

只有eth1详细信息被转储,而不是eth0。转储的数据也是无序的。

有人可以帮我解决一下,我哪里出错,以及如何解决我的代码中的这两个问题?提前谢谢。

1 个答案:

答案 0 :(得分:2)

如果您需要输出json中数据['接口'] 的所有内容,请使用以下代码段。

if vmName=='IGW':
    with open(APIJSONPath+NwIntfJSONFileName) as f:
        data=json.load(f)

with open(NwIntfJSONPath+vmName+'.json','w') as c:
    json.dump(data['Interfaces'],c,indent=2)

在您的示例中,您循环访问数据['接口']并且jdata保存列表的最后一个值。这就是为什么你只得到输出json中的最后一个元素。