以下代码使用Json的转换工具将List--->Json格式的
List<CityBean> list = dao.findCity(pid);
//list--json
/*JSONObject--->{name:zhangsan,age=12}
JSONArray --->集合[{},{}]*/
JSONArray jsonArray = JSONArray.fromObject(list);
String string = jsonArray.toString();
System.out.println(string);
但是在下面的例子里会出现循环转换的错误:
Order和OrderItem是两个Bean:一个Order里有多个OrderItem,一个OrderItem里有一个Order---->多对一的关系。
Order里有属性List<OrderItem> orderitems,OrerItem类有 private Order order属性。
由于JSONArray解析的会不断解析对象到最小粒度,于是对一个Order解析的时候,会解析到List<OrderItem> 于是对OrderItem解析,OrderItem里又有order属性,于是继续对Order解析……循环,没完没了。
这时就会出现循环解析的问题。
下面是解决方法:设置忽略掉OrderItem的order属性的解析:
Order order = orderServiceImpl.findOderByOid(oid);
//传json数据
JsonConfig jsonConfig = new JsonConfig(); //建立配置文件
jsonConfig.setIgnoreDefaultExcludes(false); //设置默认忽略
jsonConfig.setExcludes(new String[]{"order"});
//对Orderitem转换时忽略其order属性,避免循环转换
String json = JSONArray.fromObject(order.getList(),jsonConfig).toString();
resp.setContentType("application/json;charset=utf-8");
resp.getWriter().println(json);
以上完美解决Json循环解析问题。