JavaWeb:jsonデータを返すときのループ解析問題
以下のコードはJsonの変換ツールを使用してList----->Json形式の
OrderとOrderItemは2つのBeanです.1つのOrderには複数のOrderItemがあり、1つのOrderItemには1つのOrder---->複数対1の関係があります.
Orderには属性リストorderitemsがあり、OrerItemクラスにはprivate Order属性があります.
JSOnArray解析ではオブジェクトを最小粒度まで解析し続けるため,1つのOrder解析ではリストに解析してOrderItem解析し,OrderItemにはorder属性があるため,Order解析を継続している.
このとき,ループ解析の問題が発生する.
次の解決策は、OrderItemのorderプロパティを無視する解析を設定します.
List 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は2つのBeanです.1つのOrderには複数のOrderItemがあり、1つのOrderItemには1つのOrder---->複数対1の関係があります.
Orderには属性リストorderitemsがあり、OrerItemクラスにはprivate Order属性があります.
JSOnArray解析ではオブジェクトを最小粒度まで解析し続けるため,1つのOrder解析ではリストに解析して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循環解析問題を完璧に解決した.