需求
使用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": ""
}]
}
}