Home > Software design >  Remove fields from a json array in Python
Remove fields from a json array in Python

Time:07-09

Currently I have a function returning json via jsonify.

[
  {
    "hostname": "bla",
    "ipaddress": "192.168.1.10",
    "subnetmask": "255.255.255.0",
    "iloip": "192.168.1.11"
   }
]
     

I want to keep it in json format, but I want to only show the fields I choose (i.e. reduce it). For this example, I want hostname and ipaddress.

Thanks

CodePudding user response:

You can use dict comprehension:

json_input = '''
[
  
  {
    "hostname": "bla",
    "ipaddress": "192.168.1.10",
    "subnetmask": "255.255.255.0",
    "iloip": "192.168.1.11"
   }
]
'''
desired_keys = {'hostname', 'ipaddress'}

json_filtered = json.dumps([{ k:v for (k,v) in d.items() if k in desired_keys} 
        for d in json.loads(json_input)])

print(json_filtered)

output:

'[{"hostname": "bla", "ipaddress": "192.168.1.10"}]'

CodePudding user response:

I belive what you want to achieve can be done with the code given below:

import json

data_json = '{"hostname": "bla","ipaddress": "192.168.1.10","subnetmask": "255.255.255.0","iloip": "192.168.1.11"}'

data = json.loads(data_json)

chosen_fields = ['hostname', 'ipaddress']

for field in chosen_fields:
    print(f'{field}: {data[field]}')

Output:

hostname: bla
ipaddress: 192.168.1.10

Here what we do is we parse the stringified version of the json using the python's json module (i.e. json.loads(...)). Next decide on the fields we want to access (i.e. chosen_fields). Finally we iterate through the field we want to reach and get the corresponding values of the fields. This leaves the original json unmodified as you wished. Hope this helps.


Or else if you want these fields as a reduced json object:

import json

data_json = '{"hostname": "bla","ipaddress": "192.168.1.10","subnetmask": "255.255.255.0","iloip": "192.168.1.11"}'

data = json.loads(data_json)

chosen_fields = ['hostname', 'ipaddress']

reduced_json = "{" 
for field in chosen_fields:
    reduced_json  = f'"{field}": "{data[field]}", '

reduced_json = list(reduced_json)
reduced_json[-2] = "}" 
reduced_json = "".join(reduced_json)
reduced = json.loads(reduced_json)

for field in chosen_fields:
    print(f'"{field}": "{reduced[field]}"')

Output:

"hostname": "bla"
"ipaddress": "192.168.1.10"

CodePudding user response:

If I understand you correctly:

import json


response = [
    {
        "hostname": "bla",
        "ipaddress": "192.168.1.10",
        "subnetmask": "255.255.255.0",
        "iloip": "192.168.1.11",
    }
]
desired_keys = ["hostname", "ipaddress"]
new_response = json.dumps(
    [{key: x[key] for key in desired_keys} for x in response]
)

And now you have a new_response - valid JSON, with which you can continue to work on

  • Related