Python中如何移除JSON数组多余字段仅保留指定目标字段
实现方案
最直接高效的方式是在调用jsonify返回数据前,先对原始数据做字段裁剪,只保留你需要的键值对,不需要额外依赖。
基础实现(推荐)
直接遍历原始数据列表,通过字典推导式提取目标字段即可:
from flask import jsonify # 你的原始全量数据 raw_data = [ { "hostname": "bla", "ipaddress": "192.168.1.10", "subnetmask": "255.255.255.0", "iloip": "192.168.1.11" } ] # 指定需要保留的字段 target_fields = ["hostname", "ipaddress"] # 逐行过滤字段 filtered_data = [] for item in raw_data: filtered_item = {field: item[field] for field in target_fields} filtered_data.append(filtered_item) # 过滤后的数据传给jsonify返回 return jsonify(filtered_data)
如果担心部分数据条目缺少指定字段触发KeyError,可以把字典取值逻辑改成item.get(field),缺字段时会自动填充None,不会中断接口返回:
filtered_item = {field: item.get(field) for field in target_fields}
规范化实现(适合中大型项目)
如果项目里接口较多、字段规则复杂,可以用序列化组件统一控制返回字段,比如用marshmallow定义返回结构,序列化时会自动过滤未声明的字段:
from flask import jsonify from marshmallow import Schema, fields # 定义接口返回的字段结构,只写需要返回的字段 class ServerSchema(Schema): hostname = fields.Str() ipaddress = fields.IP() # 批量序列化数据,many=True对应列表结构 schema = ServerSchema(many=True) result = schema.dump(raw_data) return jsonify(result)
处理后最终返回的JSON结构如下,完全符合要求:
[ { "hostname": "bla", "ipaddress": "192.168.1.10" } ]
注意:不要先把全量数据转成JSON字符串再反序列化裁剪,会产生不必要的性能损耗,字段裁剪尽量在序列化之前完成。
内容的提问来源于stack exchange,提问作者Butcho
相关产品推荐
相关产品推荐

