在用com.google.gson.JsonArray把list对象转jsonarray后,把jsonarray放入了新的json内时,异常net.sf.json.JSONException: There is a cycle in the hierarchy!
意思是:将Java对象转换为JSON时发现了层级(循环)引用。即Java对象之间存在循环引用,例如,对象A包含对对象B的引用,而对象B也包含对对象A的引用,这会导致在转换过程中形成一个无法解析的循环结构。
出现问题的代码如下
import com.google.gson.Gson;
import com.google.gson.JsonArray;net.sf.json.JSONObject dateItem = new net.sf.json.JSONObject();List<Map<String, Object>> list = dieCutDao.selectMysql(map);if (null == list || list.isEmpty()) {return;}logger.warn("{}", list.size());Gson gson = new Gson();JsonArray jsonArray = gson.toJsonTree(list).getAsJsonArray();dateItem.put("count", jsonArray.size());dateItem.put("data", jsonArray);// 异常在这一行发生
调整后代码如下
import com.google.gson.Gson;
import com.google.gson.JsonArray;net.sf.json.JSONObject dateItem = new net.sf.json.JSONObject();List<Map<String, Object>> list = dieCutDao.selectMysql(map);if (null == list || list.isEmpty()) {return;}logger.warn("{}", list.size());Gson gson = new Gson();JsonArray jsonArray = gson.toJsonTree(list).getAsJsonArray();//这里把com.google.gson.JsonArray对象转为字符串,没有异常了String jsonArrayStr = jsonArray.toString();dateItem.put("count", jsonArray.size());dateItem.put("data", jsonArray);