目前我有一个函数通过jsonify返回json。
[
{
"hostname": "bla",
"ipaddress": "192.168.1.10",
"subnetmask": "255.255.255.0",
"iloip": "192.168.1.11"
}
]
我想保持json格式,但我想只显示我选择的字段(即减少它)。对于本例,我需要主机名和ipaddress。
感谢您可以使用字典推导:
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)
输出:
'[{"hostname": "bla", "ipaddress": "192.168.1.10"}]'
我相信你想实现可以用下面的代码:
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]}')
输出:
hostname: bla
ipaddress: 192.168.1.10
这里我们要做的是解析stringified json使用python的json版本的模块(即json.loads(…))。接下来决定我们想要访问的字段(即chosen_fields)。最后,我们遍历想要到达的字段并获得字段的相应值。这使得原始json未被修改,如您所愿。希望对你有帮助。
或者如果您希望这些字段作为简化的json对象:
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]}"')
输出:
"hostname": "bla"
"ipaddress": "192.168.1.10"
如果我没理解错的话:
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]
)
现在你有了一个new_response
有效的JSON,你可以继续在