json 学习一

本文介绍如何使用高性能的 Java JSON 库 Jackson 进行对象与 JSON 字符串的互相转换,并通过一个示例展示了如何将 Java 对象序列化为 JSON 以及如何将 JSON 反序列化为 Java 对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考资料
1 java中几个json工具分析测试【原】
http://blog.youkuaiyun.com/weinianjie1/article/details/6561788
2 两款JSON类库Jackson与JSON-lib的性能对比(新增第三款测试)
http://wangym.iteye.com/blog/738933
基于上面文章所说,jackson的性能高于其它二个json库,但gson的使用方式对我们来说是最好理解的,仿照gson提供的二个方法,以下对jackson作了一个包装,另外有个org.json.jar包就没有用了,是对源代码进行打包的,也上传上来吧,以后可能用得上的
环境:XP+JDK1.6
版本:jackson-all-1.8.1.jar

工程图片如下:

JacksonFactory.java
Java代码   收藏代码
  1. package net.liuzd.json;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.StringWriter;  
  5. import java.util.HashMap;  
  6. import java.util.Map;  
  7.   
  8. import org.codehaus.jackson.JsonFactory;  
  9. import org.codehaus.jackson.JsonGenerationException;  
  10. import org.codehaus.jackson.JsonGenerator;  
  11. import org.codehaus.jackson.JsonParseException;  
  12. import org.codehaus.jackson.map.JsonMappingException;  
  13. import org.codehaus.jackson.map.ObjectMapper;  
  14.   
  15. public class JacksonFactory {     
  16.       
  17.     private static final  ObjectMapper mapper = new ObjectMapper();   
  18.       
  19.     private JacksonFactory(){  
  20.           
  21.     }  
  22.       
  23.       
  24.     /** 
  25.      * @param <T>  泛型声明 
  26.      * @param bean 类的实例 
  27.      * @return     JSON字符串 
  28.      */  
  29.     public static <T> String toJson(T bean){        
  30.         StringWriter sw = new StringWriter();   
  31.         try {                     
  32.             JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);  
  33.             mapper.writeValue(gen, bean);  
  34.             gen.close();   
  35.             return sw.toString();  
  36.         } catch (JsonGenerationException e) {  
  37.             throw new RuntimeException(e.getMessage(),e);  
  38.         } catch (JsonMappingException e) {  
  39.             throw new RuntimeException(e.getMessage(),e);  
  40.         } catch (IOException e) {  
  41.             throw new RuntimeException(e.getMessage(),e);  
  42.         }             
  43.     }  
  44.       
  45.     /** 
  46.      * @param <T>   泛型声明 
  47.      * @param json  JSON字符串 
  48.      * @param clzz  要转换对象的类型 
  49.      * @return 
  50.      */  
  51.     public static <T> T fromJson(String json,Class<T> clzz){          
  52.           
  53.         T t = null;  
  54.         try {             
  55.             t =  mapper.readValue(json, clzz);  
  56.         } catch (JsonParseException e) {  
  57.             e.printStackTrace();  
  58.         } catch (JsonMappingException e) {  
  59.             e.printStackTrace();  
  60.         } catch (IOException e) {  
  61.             e.printStackTrace();  
  62.         }   
  63.         return t;  
  64.     }  
  65.       
  66.     /** 
  67.      * @param json  JSON字符串,请保持key是加了双引号的 
  68.      * @return      Map对象,默认为HashMap 
  69.      */  
  70.     public static Map<?,?> fromJson(String json){  
  71.         try {  
  72.             return  mapper.readValue(json, HashMap.class);  
  73.         } catch (JsonParseException e) {  
  74.             throw new RuntimeException(e.getMessage(),e);  
  75.         } catch (JsonMappingException e) {  
  76.             throw new RuntimeException(e.getMessage(),e);  
  77.         } catch (IOException e) {  
  78.             throw new RuntimeException(e.getMessage(),e);  
  79.         }             
  80.     }  
  81. }  

TestJson.java(测试类)
Java代码   收藏代码
  1. package net.liuzd.json;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Date;  
  5. import java.util.List;  
  6. import java.util.Map;  
  7.   
  8.   
  9. public class TestJson {  
  10.   
  11.       
  12.     public static void main(String[] args) {      
  13.           
  14.         String json;  
  15.         List<Book> books = new ArrayList<Book>();    
  16.         Book b1 = new Book();    
  17.         b1.setId(1);    
  18.         b1.setName("book1");    
  19.         Book b2 = new Book();    
  20.         b2.setId(2);    
  21.         b2.setName("book2");    
  22.         books.add(b1);    
  23.         books.add(b2);    
  24.         Order order = new Order();    
  25.         order.setBooks(books);    
  26.         order.setCost(100.5f);    
  27.         order.setName("orderName"); order.setDate(new Date(System.currentTimeMillis()));    
  28.           
  29.         json = JacksonFactory.toJson(order);  
  30.         System.out.println("order: " + json);  
  31.           
  32.         order = JacksonFactory.fromJson(json, Order.class);    
  33.         System.out.println(order.getName()+","+order.getCost() + "," + order.getDate());  
  34.           
  35.         for(Book b : order.getBooks()){  
  36.             System.out.println(b.getId() + "," + b.getName());  
  37.         }  
  38.         Users bean = new Users("1","张三",23);  
  39.         json = JacksonFactory.toJson(bean);  
  40.         System.out.println(json);  
  41.           
  42.         Users bean2 = JacksonFactory.fromJson(json, Users.class);    
  43.         System.out.println(bean2.getId() + "," + bean2.getUsername() + "," + bean2.getAge());         
  44.           
  45.         Map<?,?> map = JacksonFactory.fromJson("{\"a\":1, \"b\":2}");       
  46.         System.out.println(map.get("a"));  
  47.         System.out.println(map.get("b"));  
  48.           
  49.         json = JacksonFactory.toJson(map);  
  50.         System.out.println(json);      
  51.   
  52.     }  
  53. }  

输出结果如下:
Log代码   收藏代码
  1. order: {"name":"orderName","date":1318986605676,"cost":100.5,"books":[{"name":"book1","id":1},{"name":"book2","id":2}]}  
  2. orderName,100.5,Wed Oct 19 09:10:05 CST 2011  
  3. 1,book1  
  4. 2,book2  
  5. {"id":"1","username":"张三","age":23}  
  6. 1,张三,23  
  7. 1  
  8. 2  
  9. {"b":2,"a":1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值