转json出现死循环
这是个很常见的异常,就像我们重写了A类和B类的toString()方法,然后这两个类的属性都有对方的引用,打印A类的toString时候也会造成死循环,报的异常好像是栈溢出。因为A类的toString方法有B类的引用,程序执行到要打印B类的值的时候就会去找B类的toString方法,而B类的toString方法里面又有A类的引用…然后就造成死循环。同理转json时候也会出现这种情况。
所以只要是两个类都持有对方的引用生成json时候就会出现死循环
这个时候我们就要在转json格式前将会造成死循环的字段去掉。
json-lib里面有个对象叫JsonConfig 就可以让我们筛选掉我们不要的字段
使用api如下
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]{"","","",...});//有多少要晒选掉的属性就填多少个再里面,直接填属性名就可以
//然后再生成json,第一个参数填要生成json的对象,第二个就填上面要jsonConfig
String json = JSONObject.fromObject( obj , jsonConfig ).toString();//JSONArray也同样有这个参数列表