从JSON文件中过滤掉所需的数据(Python)

时间:2017-06-15 13:43:07

标签: python json dictionary

这是我的json文件的示例:

{
"pops": [{
        "name": "pop_a",
        "subnets": {
            "Public": ["1.1.1.0/24,2.2.2.0/24"],
            "Private": ["192.168.0.0/24,192.168.1.0/24"],
        "more DATA":""  
        }
    },
    {
        "name": "pop_b",
        "subnets": {
            "Public": ["3.3.3.0/24,4.4.4.0/24"],
            "Private": ["192.168.2.0/24,192.168.3.0/24"],
        "more DATA":""
        }
    }
]
}

在我阅读之后,我想制作一个dic对象并存储我需要的一些东西。 我希望我的对象像这样..

[{
    "name": "pop_a",
    "subnets": {"Public": ["1.1.1.0/24,2.2.2.0/24"],"Private": ["192.168.0.0/24,192.168.1.0/24"]}
},
{
    "name": "pop_b",
    "subnets": {"Public": ["3.3.3.0/24,4.4.4.0/24"],"Private": ["192.168.2.0/24,192.168.3.0/24"]}
}]

然后我希望能够访问一些公共/私人价值

这是我试过的,我知道有更新(),setdefault()也给出了相同的不需要的结果

def my_funckion():
   nt_json = [{'name':"",'subnets':[]}]
   Pname = []
   Psubnet= []

   for pop in pop_json['pops']:  # it print only the last key/value
      nt_json[0]['name']= pop['name']
      nt_json[0]['subnet'] = pop['subnet']
   pprint (nt_json)

  for pop in pop_json['pops']: 
   """
     it print the names in a row then all of the ipss
   """
     Pname.append(pop['name'])
     Pgre.append(pop['subnet'])
     nt_json['pop_name'] = Pname
     nt_json['subnet']= Psubnet
   pprint (nt_json)

1 个答案:

答案 0 :(得分:1)

这是使用列表理解的快速解决方案。请注意,只有充分了解json结构才能采用这种方法。

>>> import json
>>>
>>> data = ... # your data
>>> new_data = [{ "name" : x["name"], "subnets" : {"Public" : x["subnets"]["Public"], "Private" : x["subnets"]["Private"]}} for x in data["pops"]]
>>>
>>> print(json.dumps(new_data, indent=2))
[
  {
    "name": "pop_a",
    "subnets": {
      "Private": [
        "192.168.0.0/24,192.168.1.0/24"
      ],
      "Public": [
        "1.1.1.0/24,2.2.2.0/24"
      ]
    }
  },
  {
    "name": "pop_b",
    "subnets": {
      "Private": [
        "192.168.2.0/24,192.168.3.0/24"
      ],
      "Public": [
        "3.3.3.0/24,4.4.4.0/24"
      ]
    }
  }
]