如何从JSON中移除对象?以及移除指定JSON中的'_id'字段?
移除JSON对象中字段的解决方案
嘿,我来帮你搞定从JSON里移除字段的问题,分通用方法和针对你提供的JSON的具体操作来说明:
一、通用移除JSON对象字段的方法
下面是几种常用的方式,你可以根据场景选择:
使用
delete操作符:这是最直接修改原对象的方式,语法简单,适合明确知道字段位置的场景。// 移除顶层字段 delete obj.targetKey; // 移除嵌套字段 delete obj.nestedObj.targetKey;注意:如果目标字段不存在,
delete不会报错,只是返回false。解构赋值创建新对象:适合不想修改原对象、需要保留原数据的场景,通过解构排除目标字段,生成新对象。
// 移除顶层字段 const { targetKey, ...newObj } = obj; // 移除嵌套字段的简洁写法 const newObj = { ...obj, nestedObj: (({ targetKey, ...rest }) => rest)(obj.nestedObj) };递归遍历移除字段:如果JSON结构复杂,不确定目标字段在哪个层级,写个递归函数遍历所有属性,遇到目标字段就删除。
function removeTargetField(obj, fieldName) { // 遍历对象所有自有属性 for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { if (key === fieldName) { delete obj[key]; } else if (typeof obj[key] === 'object' && obj[key] !== null) { // 递归处理嵌套对象 removeTargetField(obj[key], fieldName); } } } return obj; } // 调用示例:移除所有层级的_id字段 removeTargetField(yourJson, '_id');
二、针对你提供的JSON移除_id字段
先把你给出的JSON变量格式化一下,方便查看结构:
var json = { '@Version': '0', 'AirReservation': { 'AirItinerary': { 'OriginDestinationOptions': { 'OriginDestinationOption': { '@RefNumber': '0', '@DirectionId': '0', '@ElapsedTime': '0320', 'FlightSegment': { '@DepartureDateTime': '2018-04-09T05:30:00', '@ArrivalDateTime': '2018-04-09T07:20:00', '@FlightNumber': '873', '@ResBookDesigCode': 'V', '@Status': 'HK', 'FlightDuration': '2018-04-03T03:20:00', 'DepartureAirport': { '@LocationCode': 'IKA', '@Terminal': '...' } } } } } } };
根据_id可能存在的位置,对应操作如下:
1. 如果_id在顶层
// 修改原对象 delete json._id; // 或者创建新对象,不修改原数据 const { _id, ...newJson } = json;
2. 如果_id在嵌套层级(比如AirReservation下)
// 先判断字段存在再删除,避免报错 if (json.AirReservation && json.AirReservation._id) { delete json.AirReservation._id; } // 解构创建新对象的方式 const newJson = { ...json, AirReservation: (({ _id, ...rest }) => rest)(json.AirReservation) };
3. 不确定_id位置,移除所有层级的_id
直接用上面的递归函数:
function removeTargetField(obj, fieldName) { for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { if (key === fieldName) { delete obj[key]; } else if (typeof obj[key] === 'object' && obj[key] !== null) { removeTargetField(obj[key], fieldName); } } } return obj; } // 执行移除 removeTargetField(json, '_id');
内容的提问来源于stack exchange,提问作者sahar
相关产品推荐
相关产品推荐

