我想保持它的json格式,但我想只显示我选择的字段(即减少它)。在这个例子中,我想要主机名和ipaddress。

2 个评论
如果你有一个字典的列表,你可以在列表上迭代,要么使用 del d["subnetmask"] ,要么使用 d.pop("subnetmask") (假设你的字典是 d ,你想删除 subnetmask )。
欢迎回到Stack Overflow!作为复习,请参加 tour 并阅读 如何提问 .你已经尝试了什么,你到底需要什么帮助?比如,要开始,你知道 如何解析一个JSON字符串 以及如何从dict中删除键(或如何选择键)?
python
json
Butcho
Butcho
发布于 2022-07-09
3 个回答
SomeDude
SomeDude
发布于 2022-07-09
已采纳
0 人赞同

你可以使用口述理解。

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"}]'
    
cangozpi
cangozpi
发布于 2022-07-09
0 人赞同

我相信你想实现的目标可以用下面的代码完成。

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

在这里,我们所做的是使用python的json模块解析字符串化的json版本(即json.load(...))。接下来决定我们要访问的字段(即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]}"')

Output:

"hostname": "bla"
"ipaddress": "192.168.1.10"
    
QwertYou
QwertYou
发布于 2022-07-09
0 人赞同

如果我没有理解错的话。

import json
response = [
        "hostname": "bla",
        "ipaddress": "192.168.1.10",
        "subnetmask": "255.255.255.0",
        "iloip": "192.168.1.11",
desired_keys = ["hostname", "ipaddress"]