Java中递归遍历Map数据,并替换值为null的数据

需求

使用JSONObject.toJSONString()打印map数据如下,现在希望将值为"null"替换为""

{
    "TYPE": "FLIGHTLOAD",
    "DATA":
    {
        "FLIGHTID":
        {
            "OUTERFLIGHTID": "6A9DF3F551060192E0530B061C20F1C1",
            "CARRIER": "MF",
            "FLIGHT": "null",
            "ORIGIN": "PEK",
            "DESTINATION": "XMN",
            "SCHEDULEDEPARTURETIME": "20190312160500"
        },
        "PAYLOAD": [
        {
            "DEPARTUREAIRPORT": "PEK",
            "DESTINATIONAIRPORT": "XMN""TRANSITCHILD": "null",
            "TRANSITINFANT": "null",
            "BAGGAGE": "959",
            "BAGGAGECOUNT": "959",
            "POST": "0",
            "CARGO": "1859",
            "TRANSITPOST": "null",
            "TRANSITCARGO": "null"
        }]
    }
}

工具方法

可见,map数据的值类型有map、List类型

/**
 * 递归替换map中值为"null"的数据为""
 * @param jsonResult 待处理的map数据
 */
@SuppressWarnings("unchecked")
public static void mapNullToEmpty(Map<String, Object> jsonResult) {
    for (Map.Entry<String, Object> entry : jsonResult.entrySet()) {
        String key = entry.getKey();
        Object obj = entry.getValue();
        // 值为String,即最后一层
        if (obj instanceof String) {
            if ("null".equals(obj)) { //此处可替换为实际业务需要
                jsonResult.put(key, "");
            }
        }
        // 值为 ArrayList 类型
        else if (obj instanceof List) {
            List<Map<String, Object>> dataList = (List<Map<String, Object>>) obj;
            for (Map<String, Object> data : dataList) {
                mapNullToEmpty(data);
            }
        }
        // 值为 LinkedHashMap 类型
        else if (obj instanceof Map) {
            mapNullToEmpty((Map<String, Object>) obj);
        }
    }
}

最终效果

{
    "TYPE": "FLIGHTLOAD",
    "DATA":
    {
        "FLIGHTID":
        {
            "OUTERFLIGHTID": "6A9DF3F551060192E0530B061C20F1C1",
            "CARRIER": "MF",
            "FLIGHT": "",
            "ORIGIN": "PEK",
            "DESTINATION": "XMN",
            "SCHEDULEDEPARTURETIME": "20190312160500"
        },
        "PAYLOAD": [
        {
            "DEPARTUREAIRPORT": "PEK",
            "DESTINATIONAIRPORT": "XMN",
            "TRANSITCHILD": "",
            "TRANSITINFANT": "",
            "BAGGAGE": "959",
            "BAGGAGECOUNT": "959",
            "POST": "0",
            "CARGO": "1859",
            "TRANSITPOST": "",
            "TRANSITCARGO": ""
        }]
    }
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值