JSON JavaBean 互转工具

在json.org上面可以看到现在java方面的支持json的开源项目很多。

最近稍微看了下gson和json-lib,第一次使用印象如下:

1、gson提供了一个JSON<-->JavaBean相互转换的框架,采用了java中的reflect,同时类型转换要求比较严格, 如果是图方便最好还是用json-lib。第一眼就没看出来怎么用,后来才发现:

  1. //json->java
  2.         String src =  "{\"date\":\"2008-10-25\",\"str\":\"sss\",\"i\":23,\"l\":333443,\"d\":1.23}" ;
  3.         Gson gson =  new  GsonBuilder().setDateFormat( "yyyy-MM-dd" ).create();
  4.         BeanA a = gson.fromJson(src, BeanA. class );

 

  1. //java->json
  2.         Gson gson =  new  GsonBuilder()
  3. //      .registerTypeAdapter(BeanA.class, new JsonSerializer<BeanA>(){
  4. //
  5. //
  6. //          public JsonElement serialize(BeanA src, Type typeOfSrc,
  7. //                  JsonSerializationContext context) {
  8. //              JSONObject obj = JSONObject.fromObject(src);
  9. //              JsonObject e =  new JsonObject();
  10. //              Iterator<String> its = obj.keys();
  11. //              while(its.hasNext()){
  12. //                  String key = its.next();
  13. //                  e.addProperty(key, obj.getString(key));
  14. //              }
  15. //              return e;
  16. //          }
  17. //          
  18. //      })
  19. //      .registerTypeAdapter(Object.class, new JsonSerializer<Object>(){
  20. //          public JsonElement serialize(Object src, Type typeOfSrc,
  21. //                  JsonSerializationContext context) {
  22. //              JSONObject obj = JSONObject.fromObject(src);
  23. //              JsonObject e =  new JsonObject();
  24. //              Iterator<String> its = obj.keys();
  25. //              while(its.hasNext()){
  26. //                  String key = its.next();
  27. //                  e.addProperty(key, obj.getString(key));
  28. //              }
  29. //              return e;
  30. //          }
  31. //          
  32. //      })
  33.         .create();
  34.         
  35.         BeanA a =  new  BeanA();
  36.         a.setD(Double.valueOf( "1.23" ));
  37.         a.setDate( new  Date());
  38.         a.setI(Integer.valueOf( 23 ));
  39.         a.setL(Long.valueOf( "333443" ));
  40.         a.setStr( "sss" );
  41.         
  42.         Map m =  new  HashMap();
  43.         m.put( "a"1 );
  44.         m.put( "b" , 1l);
  45.         m.put( "c"true );
  46.         m.put( "d""str" );
  47.         
  48.         Map mA =  new  HashMap();
  49.         mA.put( "bean" , a);
  50.         
  51.         Type mapType =  new  TypeToken<Map<String, String>>() { }.getType();
  52.         String rs = gson.toJson(m,mapType);
  53.         System.out.println(rs);
  54.         
  55.         Type mapTypeA =  new  TypeToken<Map<String, BeanA>>() { }.getType();
  56.         String rsA = gson.toJson(mA,mapTypeA);
  57.         System.out.println(rsA);
  58.         
  59.         Type mapTypeB =  new  TypeToken<BeanA>() { }.getType();
  60.         String rsB = gson.toJson(a,mapTypeB);
  61.         System.out.println(rsB);
  62.         
  63.         
  64.         Type mapTypeC =  new  TypeToken<Date>() { }.getType();
  65.         String rsC = gson.toJson( new  Date(),mapTypeC);
  66.         System.out.println(rsC);


不过它的代码是个学习jdk1.5中的泛型的好资料。

2、json-lib使用了ezmorph进行对象之间的转换,已经实现了基本类型的转换支持。基本使用上手较快。


3、json-lib由于使用了ezmorph进行转换,其java.util.Date的转换方式已经实现了,只需要手动注册需要的转换的pattern即可。
 注册方法为:

  1.         JSONUtils.getMorpherRegistry().registerMorpher( new  DateMorpher( new  String[]{
  2.                  "yyyy-MM-dd HH:mm" ,
  3.                  "yyyy-MM-dd"
  4.         }));
  5.         // 然后调用json->bean的方法
  6.        Object a = JSONObject.toBean(JsonSrc);
  7.        //or
  8.        JSONSerializer.toJava( JsonSrc );
  9.                

4、从json-lib的框架结构来看,在jsonconfig中提供了较好的java->json转换的接口,而json->java中默认使用了ezmorph中的转换方法,并且没有在jsonconfig中进行体现,只是全局都使用了JSONUtils.getMorpherRegistry()进行处理。所以要注册json->java的转换方法,貌似只能通过以上方法 进行。

      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值