針對移動端交互,封裝多層次 JSON 生成方法:
public static String getBasicJsonStr(int reqCode, String bak) {
StringBuffer sb = new StringBuffer("{\"outParam\":{");
sb.append("\"reqCode\":\"").append(reqCode).append("\",");
sb.append("\"reqBak\":\"").append(bak != null ? bak : getDesc(reqCode)).append("\",");
sb.append("\"respTime\":\"").append(currentTime()).append("\"");
sb.append("}}");
return sb.toString();
}
public static String getJsonStr(int reqCode, Object[] fields, List<?> list, Class<?> clazz,
Object[] supFields, Object[] supVals) throws Exception {
StringBuffer sb = new StringBuffer("{\"outParam\":{\"reqCode\":\"").append(reqCode)
.append("\",\"reqBak\":\"").append(getDesc(reqCode))
.append("\",\"respTime\":\"").append(currentTime()).append("\",\"life\":{");
// supFields 附加字段
if (supFields != null) { ... }
// 列表序列化
if (list != null && !list.isEmpty()) {
sb.append("\"lifeList\":[");
for (Object obj : list) {
sb.append("{");
for (int j = 0; j < fields.length; j++) {
Method m = clazz.getDeclaredMethod("get" + capitalize(fields[j].toString()));
Object val = m.invoke(obj);
sb.append("\"").append(fields[j]).append("\":\"").append(val == null ? "" : val).append("\"");
if (j != fields.length - 1) sb.append(",");
}
sb.append("}");
if (obj != list.get(list.size() - 1)) sb.append(",");
}
sb.append("]");
}
sb.append("}}}");
return sb.toString();
}
檢測字段值若為 List,遞歸遍歷子對象字段(getJsonStrByObjectToList)。
以 Map<String, List> 為入參,鍵作 JSON 數組名,值為集合(getJsonStrByMap)。
public static String toJSONString(Object obj) {
return JSON.toJSONString(obj); // com.alibaba.fastjson.JSON
}
getEncoding(str)reqJsonStr