JSON

Json体验之——Json-lib使用浅谈(三)(2)

字号+ 作者:H5之家 来源:H5之家 2016-01-17 09:17 我要评论( )

那这种情况的解析方法 1 String jsonMyBean3 = {mybean2List:[{id:1,name:mybean3}],mybean2Map:{1:{id:2,name:mybean3}}}; 2Map classMap2 = new HashMap(); 3classMap2.put(mybean2List, MyBean2.class); 4// cla

那这种情况的解析方法

1      String jsonMyBean3 = "{'mybean2List':[{'id':'1','name':'mybean3'}],'mybean2Map':{'1':{'id':'2','name':'mybean3'}}}"; 2 Map classMap2 = new HashMap(); 3 classMap2.put("mybean2List", MyBean2.class); 4 // classMap2.put("mybean2Map", Map.class); 5 MyBean3 mybean3 = (MyBean3) JSONObject.toBean( 6 JSONObject.fromObject(jsonMyBean3), MyBean3.class, classMap2); 7 System.out.println("-------------" 8 + mybean3.getMybean2List().getClass() + "|" 9 + mybean3.getMybean2Map().getClass() + "|"); 10 // List<MyBean2> mybean2List = mybean3.getMybean2List(); 11 Morpher dynaMorpher = new BeanMorpher(MyBean2.class, 12 JSONUtils.getMorpherRegistry()); 13 MorpherRegistry morpherRegistry = new MorpherRegistry(); 14 morpherRegistry.registerMorpher(dynaMorpher); 15 List output = new ArrayList(); 16 for (Iterator i = mybean3.getMybean2List().iterator(); i.hasNext();) { 17 Object morph = morpherRegistry.morph(MyBean2.class, i.next()); 18 output.add(morph); 19 } 20 mybean3.setMybean2List(output); 21 // 打印结果 22 for (MyBean2 object : mybean3.getMybean2List()) { 23 System.out.println("特殊转换list——" + object.getName()); 24 } 25 // Map 26 morpherRegistry.registerMorpher(dynaMorpher); 27 Map outputMap = new HashMap(); 28 for (Map.Entry outMap : mybean3.getMybean2Map().entrySet()) { 29 Object value = outMap.getValue(); 30 outputMap.put(outMap.getKey(), 31 morpherRegistry.morph(MyBean2.class, value)); 32 } 33 mybean3.setMybean2Map(outputMap); 34 // 输出部分结果 35 for (Map.Entry<String, MyBean2> bean2Map : mybean3.getMybean2Map() 36 .entrySet()) { 37 System.out.println("特殊转换map——" + bean2Map.getKey() + ":" 38 + bean2Map.getValue()); 39 } 40 }

结果

1 特殊转换list——mybean3十二月 21, 2014 3:14:58 下午 net.sf.ezmorph.bean.BeanMorpher morph 2 信息: Property 'com.r.json.jsonlib.MyBean2.class' has no write method. SKIPPED. 3 4 十二月 21, 2014 3:14:58 下午 net.sf.ezmorph.bean.BeanMorpher morph 5 信息: Property 'com.r.json.jsonlib.MyBean2.class' has no write method. SKIPPED. 6 特殊转换map——1:com.r.json.jsonlib.MyBean2@282c1e2e

list中包含自定义对象,可以将自定义类型放到一个map里,tobean()方法里多一个classMap参数,但经过测试这个参数没有也是可以的。

这包不方便的地方,这个里面的自定义类型需要自己手动转换,用例子中的方法。结果中打印里一些信息,“no write method”,经过看源码,是反射类属性时,类中的class对象没有write方法,不影响解析。

总结:从json解析java对象,一般的内容使用JSONObject或JSONArray的toBean方法即可,若是 自定义类型,使用带class对象参数的toBean方法,,若是list,map中包含自定义类型,则在使用toBean方法后,要手动转换 DynaBean类型到实际类型。

  • 本文来自:爱好Linux技术网
  • 本文链接:
  •  

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • maven使用笔记一 下载json

      maven使用笔记一 下载json

      2016-01-17 16:08

    • JSON-LIB使用

      JSON-LIB使用

      2015-11-10 14:45

    • lib的maven配备

      lib的maven配备

      2015-11-05 17:46

    • lib date对象转json ,加入自定义日期格式处理

      lib date对象转json ,加入自定义日期格式处理

      2015-10-31 16:08

    网友点评