当前位置:   article > 正文

java中list列表转为json数据的方法_list如何转换json对象

list如何转换json对象

SSH 项目中异步提交需要用到JSON返回给页面一个json字符串
在XXXAction就要把从DAO里查询返回的List集合转成JSONArray数组
通常是:
java代码:

List list = bookService.findAll();//全查询返回book的List集合结果
JSONArray jsonArray =JSONArray.fromObject(list);//把list转成JSONArray
String json = jsonArray.toString();//json字符串
ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");//改编码
PrintWriter out =ServletActionContext.getResponse().getWriter();//获取PrintWriter对象
out.print(json);//把json字符串返回的页面

而如果在项目中出现多表 有主外键关系,即hibernate映射会有一对多或者多对一的关系。
实体类中 “多”的一方会有“一”的一方的实体对象,而“一”的一方会有“多”的一方的Set集合。
在查询返回List对象转成JSONArray的时候,以上代码就会报错。
解决办法 —— 把查询出来中的实体对象 或者 Set集合过滤掉:

java代码:

List list = bookService.findAll();//全查询返回book的List集合结果
JsonConfig config = new JsonConfig();
config.setExcludes(new String[] { "Category"});
//红色的部分是过滤掉Category对象 不转成JSONArray
JSONArray jsonArray = JSONArray.fromObject(list,config);
String json = jsonArray.toString();//json字符串
ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");//改编码
PrintWriter out =ServletActionContext.getResponse().getWriter();//获取PrintWriter对象
out.print(json);//把json字符串返回的页面

用一上过滤掉实体对象就不会报错了,可是如果页面需要像是种类表的名字,而你恰恰把Category这个对象过滤,获取不到种类名字,这样就苦恼了。于是老师在看过帮助文档之后告诉我们另一种方法。

java代码:

List list = bookService.findAll();//全查询返回book的List集合结果
JsonConfig config = new JsonConfig();
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);

JSONArray jsonArray = JSONArray.fromObject(list,config);
String json = jsonArray.toString();//json字符串
ServletActionContext.getResponse().setContentType("text/html;charset=utf-8");//改编码
PrintWriter out =ServletActionContext.getResponse().getWriter();//获取PrintWriter对象
out.print(json);//把json字符串返回的页面

不管是查询“多”的一方还是“一”的一方都可以用以上代码解决了。
不过“多”的一方的映射文件中的many-to-one元素要加个lazy="false"(不延迟加载)的属性哦。不然还是会报错。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/366898
推荐阅读
相关标签
  

闽ICP备14008679号