JSON--List集合转换成JSON对象详解
1.简单的手动放置键值对到JSONObject,然后在put到JSONArray对象里
List<Article>al=articleMng.find(f); System.out.println(al.size()); HttpServletResponsehsr=ServletActionContext.getResponse(); if(null==al){ return; } for(Articlea:al){ System.out.println(a.getId()+a.getDescription()+a.getTitle()); } JSONArrayjson=newJSONArray(); for(Articlea:al){ JSONObjectjo=newJSONObject(); jo.put("id",a.getId()); jo.put("title",a.getTitle()); jo.put("desc",a.getDescription()); json.put(jo); } try{ System.out.println(json.toString()); hsr.setCharacterEncoding("UTF-8"); hsr.getWriter().write(json.toString()); }catch(IOExceptione){ e.printStackTrace(); }
上述代码JSONArray是引入的org.json.JSONArray包
而用net.sf.json包下JSONArray的静态方法:fromObject(list)这是网上大多是都是直接用此方法快捷转换JSON,但是对于Hibernate级联操作关联的对象,这个方法就会报错,如果将映射文件中的级联配置去掉就行了。
另外对于list的要求就是其中的元素是字符串或对象,否则JSON不知道你想要的是什么数据。
<many-to-onename="cmsent"column="comment_tid"class="com.fcms.cms.entity.CmsComment" not-null="false"cascade="delete">
但是级联操作毕竟还是得存在,否则以后数据冗余、多余。
解决方法就是:JSONArraysubMsgs=JSONArray.fromObject(object,config);
JsonConfigconfig=newJsonConfig(); config.setJsonPropertyFilter(newPropertyFilter(){ publicbooleanapply(Objectarg0,Stringarg1,Objectarg2){ if(arg1.equals("article")||arg1.equals("fans")){ returntrue; }else{ returnfalse; } } });
说明:提供了一个过滤作用,如果遇到关联的对象时他会自动过滤掉,不去执行关联关联所关联的对象。这里我贴出我hibernate中的配置关系映射的代码帮助理解:
<!--配置话题和团体之间的关系--> <many-to-onename="article"class="com.fcms.nubb.article"column="article_id"/> <!--配置主题帖与回复的帖子之间的关系--> <setname="subMessages"table="sub_message"inverse="true"cascade="all"lazy="false"order-by="dateasc"> <keycolumn="theme_id"/> <one-to-manyclass="bbs.po.SubMessage"/> </set>
总结:
1.JSONArraysubMsgs=JSONArray.fromObject(subMessages,config);其中config是可选的,当出现上面的情况是可以配置config参数,如果没有上面的那种需求就可以直接使用fromObject(obj)方法,它转换出来的就是标准的json对象格式的数据,如下:
{["attr","content",...},...]}
2.JSONObjectjTmsg=JSONObject.fromObject(themeMessage,config);这是专门用来解析标准的pojo,或者map对象的,pojo对象的格式就不用说了,map的形式是这样的{"str","str"}。
---------------------------------------------------------- 分割-------------------------------------------------------------------------------------------
对于JSONArray和JSON之前用到想吐了!!!
bean
packagecom.nubb.bean; importjava.io.Serializable; publicclassPersonimplementsSerializable{ privatestaticfinallongserialVersionUID=1L; privateStringname; privateintage; privateStringaddress; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicStringgetAddress(){ returnaddress; } publicvoidsetAddress(Stringaddress){ this.address=address; } }
JsonUtil
packagecom.nubb.test; importjava.io.IOException; importjava.nio.file.Files; importjava.nio.file.Path; importjava.nio.file.StandardOpenOption; importjava.util.ArrayList; importjava.util.List; importcom.alibaba.fastjson.JSON; importcom.nubb.bean.Person; publicclassJSONSerializer{ privatestaticfinalStringDEFAULT_CHARSET_NAME="UTF-8"; publicstatic<T>Stringserialize(Tobject){ returnJSON.toJSONString(object); } publicstatic<T>Tdeserialize(Stringstring,Class<T>clz){ returnJSON.parseObject(string,clz); } publicstatic<T>Tload(Pathpath,Class<T>clz)throwsIOException{ returndeserialize( newString(Files.readAllBytes(path),DEFAULT_CHARSET_NAME),clz); } publicstatic<T>voidsave(Pathpath,Tobject)throwsIOException{ if(Files.notExists(path.getParent())){ Files.createDirectories(path.getParent()); } Files.write(path, serialize(object).getBytes(DEFAULT_CHARSET_NAME), StandardOpenOption.WRITE, StandardOpenOption.CREATE, StandardOpenOption.TRUNCATE_EXISTING); } publicstaticvoidmain(String[]args){ Personperson1=newPerson(); person1.setAddress("address"); person1.setAge(11); person1.setName("amao"); Personperson2=newPerson(); person2.setAddress("address"); person2.setAge(11); person2.setName("amao"); List<Person>lp=newArrayList<Person>(); lp.add(person1); lp.add(person2); System.out.println(serialize(lp)); } }
输出:
[{"address":"address","age":11,"name":"amao"},{"address":"address","age":11,"name":"amao"}]
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。