背景:一個復雜結構體內部可能有array的數據,例如:{name:"test",cities:[{name:"shanghai",area:1,code:20010},{name:"suzhou",area:1,code:200200},...]},如果將整個結構體映射為JSONObject,那么cities的結構只能以JSONArray的結構取出來,而fastjson的JSONArray沒有提供轉換為List<T>的方法。
分析:fastjson提供了將JSONObject轉化為java類的方法,可以遍歷JSONArray,將其中的元素轉化為類的實體。
解決:
/** * 將 fastjson的JSONArray轉化為泛型列表 * @param jsonArray 源數據 * @param clz 泛型類 * @param <T> 泛型 * @return list */ public static <T> List<T> convertJSONArrayToTypeList(JSONArray jsonArray,Class<T> clz){ if (CollectionUtils.isEmpty(jsonArray)){ return new ArrayList<T>(); } List<T> result = new ArrayList<T>(jsonArray.size()); jsonArray.forEach(element->{ // 基礎類型不可以轉化為JSONObject,需要特殊處理 if (element instanceof String || element instanceof Number || element instanceof Boolean ){ result.add((T)element); }else { T t = JSONObject.toJavaObject((JSONObject)element, clz); result.add(t); } }); return result; }