不依赖json组件全局配置和注解,通过遍历json进行长long类型替换。(并不是前者方案不好,而是现有系统不支持用前者...)
不多说了上代码:)
public static JSONObject copyJsonAndLongToString(JSONObject data, JSONObject result) {
Set<String> parentKey = data.keySet();// 获取所有的key
for (String key : parentKey) {
Object sunData = data.get(key);// 通过key获取value
if (JSONUtil.isJsonArray(sunData.toString())) {
JSONArray jsonArray = JSONUtil.parseArray(sunData);
JSONArray newArray = new JSONArray();
for(int i=0;i<jsonArray.size();i++){
JSONObject newObj = new JSONObject();
copyJsonAndLongToString(JSONUtil.parseObj( jsonArray.get(i)), newObj);// 递归解析子层JSON
newArray.add(newObj);
}
if(sunData instanceof String) {
result.put(key, newArray.toString());
}else {
result.put(key, newArray);
}
} else if (JSONUtil.isJson(sunData.toString())) {
JSONObject newObj = new JSONObject();
copyJsonAndLongToString(JSONUtil.parseObj(sunData), newObj);// 递归解析子层JSON
if(sunData instanceof String) {
result.put(key, newObj.toString());
}else {
result.put(key, newObj);
}
} else if (sunData instanceof Long) {
//处理长Long
if (sunData.toString().length() >= 15) {
result.put(key, sunData.toString());
} else {
result.put(key, sunData);
}
} else {
result.put(key, sunData);// 如果value不是json类型那么直接输出
}
}
return result;// 输出解析后的数据
}