在json.org上面可以看到现在java方面的支持json的开源项目很多。
最近稍微看了下gson和json-lib,第一次使用印象如下:
1、gson提供了一个JSON<-->JavaBean相互转换的框架,采用了java中的reflect,同时类型转换要求比较严格, 如果是图方便最好还是用json-lib。第一眼就没看出来怎么用,后来才发现:
不过它的代码是个学习jdk1.5中的泛型的好资料。
2、json-lib使用了ezmorph进行对象之间的转换,已经实现了基本类型的转换支持。基本使用上手较快。
3、json-lib由于使用了ezmorph进行转换,其java.util.Date的转换方式已经实现了,只需要手动注册需要的转换的pattern即可。
注册方法为:
4、从json-lib的框架结构来看,在jsonconfig中提供了较好的java->json转换的接口,而json->java中默认使用了ezmorph中的转换方法,并且没有在jsonconfig中进行体现,只是全局都使用了
JSONUtils.getMorpherRegistry()进行处理。所以要注册json->java的转换方法,貌似只能通过以上方法进行。
最近稍微看了下gson和json-lib,第一次使用印象如下:
1、gson提供了一个JSON<-->JavaBean相互转换的框架,采用了java中的reflect,同时类型转换要求比较严格, 如果是图方便最好还是用json-lib。第一眼就没看出来怎么用,后来才发现:
- //json->java
- String src = "{/"date/":/"2008-10-25/",/"str/":/"sss/",/"i/":23,/"l/":333443,/"d/":1.23}";
- Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
- BeanA a = gson.fromJson(src, BeanA.class);
- //java->json
- Gson gson = new GsonBuilder()
- // .registerTypeAdapter(BeanA.class, new JsonSerializer<BeanA>(){
- //
- //
- // public JsonElement serialize(BeanA src, Type typeOfSrc,
- // JsonSerializationContext context) {
- // JSONObject obj = JSONObject.fromObject(src);
- // JsonObject e = new JsonObject();
- // Iterator<String> its = obj.keys();
- // while(its.hasNext()){
- // String key = its.next();
- // e.addProperty(key, obj.getString(key));
- // }
- // return e;
- // }
- //
- // })
- // .registerTypeAdapter(Object.class, new JsonSerializer<Object>(){
- // public JsonElement serialize(Object src, Type typeOfSrc,
- // JsonSerializationContext context) {
- // JSONObject obj = JSONObject.fromObject(src);
- // JsonObject e = new JsonObject();
- // Iterator<String> its = obj.keys();
- // while(its.hasNext()){
- // String key = its.next();
- // e.addProperty(key, obj.getString(key));
- // }
- // return e;
- // }
- //
- // })
- .create();
- BeanA a = new BeanA();
- a.setD(Double.valueOf("1.23"));
- a.setDate(new Date());
- a.setI(Integer.valueOf(23));
- a.setL(Long.valueOf("333443"));
- a.setStr("sss");
- Map m = new HashMap();
- m.put("a", 1);
- m.put("b", 1l);
- m.put("c", true);
- m.put("d", "str");
- Map mA = new HashMap();
- mA.put("bean", a);
- Type mapType = new TypeToken<Map<String, String>>() { }.getType();
- String rs = gson.toJson(m,mapType);
- System.out.println(rs);
- Type mapTypeA = new TypeToken<Map<String, BeanA>>() { }.getType();
- String rsA = gson.toJson(mA,mapTypeA);
- System.out.println(rsA);
- Type mapTypeB = new TypeToken<BeanA>() { }.getType();
- String rsB = gson.toJson(a,mapTypeB);
- System.out.println(rsB);
- Type mapTypeC = new TypeToken<Date>() { }.getType();
- String rsC = gson.toJson(new Date(),mapTypeC);
- System.out.println(rsC);
不过它的代码是个学习jdk1.5中的泛型的好资料。
2、json-lib使用了ezmorph进行对象之间的转换,已经实现了基本类型的转换支持。基本使用上手较快。
3、json-lib由于使用了ezmorph进行转换,其java.util.Date的转换方式已经实现了,只需要手动注册需要的转换的pattern即可。
注册方法为:
- JSONUtils.getMorpherRegistry().registerMorpher(new DateMorpher(new String[]{
- "yyyy-MM-dd HH:mm",
- "yyyy-MM-dd"
- }));
- // 然后调用json->bean的方法
- Object a = JSONObject.toBean(JsonSrc);
- //or
- JSONSerializer.toJava(JsonSrc);
-