JackSon

二、Java对象转换成JSON

1、 JavaBean(Entity/Model)转换成JSON

 
 
  1. /**  
  2. * <b>function:</b>将java对象转换成json字符串  
  3. * @author hoojo  
  4. * @createDate 2010-11-23 下午06:01:10  
  5. */ 
  6. @Test 
  7. public void writeEntityJSON() {  
  8. try {  
  9. System.out.println("jsonGenerator");  
  10. //writeObject可以转换java对象,eg:JavaBean/Map/List/Array等  
  11. jsonGenerator.writeObject(bean);   
  12. System.out.println();  
  13. System.out.println("ObjectMapper");  
  14. //writeValue具有和writeObject相同的功能  
  15. objectMapper.writeValue(System.out, bean);  
  16. catch (IOException e) {  
  17. e.printStackTrace();  
  18. }  

运行后结果如下:

 
 
  1. jsonGenerator  
  2. {"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"}  
  3. ObjectMapper  
  4. {"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"

上面分别利用JsonGenerator的writeObject方法和ObjectMapper的writeValue方法完成对Java对象的转换,二者传递的参数及构造的方式不同;JsonGenerator的创建依赖于ObjectMapper对象。也就是说如果你要使用JsonGenerator来转换JSON,那么你必须创建一个ObjectMapper。但是你用ObjectMapper来转换JSON,则不需要JSONGenerator。

objectMapper的writeValue方法可以将一个Java对象转换成JSON。这个方法的参数一,需要提供一个输出流,转换后可以通过这个流来输出转换后的内容。或是提供一个File,将转换后的内容写入到File中。当然,这个参数也可以接收一个JSONGenerator,然后通过JSONGenerator来输出转换后的信息。第二个参数是将要被转换的Java对象。如果用三个参数的方法,那么是一个Config。这个config可以提供一些转换时的规则,过指定的Java对象的某些属性进行过滤或转换等。

2、 将Map集合转换成Json字符串

 
 
  1. /**  
  2. * <b>function:</b>将map转换成json字符串  
  3. * @author hoojo  
  4. * @createDate 2010-11-23 下午06:05:26  
  5. */ 
  6. @Test 
  7. public void writeMapJSON() {  
  8. try {  
  9. Map<String, Object> map = new HashMap<String, Object>();  
  10. map.put("name", bean.getName());  
  11. map.put("account", bean);  
  12. bean = new AccountBean();  
  13. bean.setAddress("china-Beijin");  
  14. bean.setEmail("hoojo@qq.com");  
  15. map.put("account2", bean);  
  16. System.out.println("jsonGenerator");  
  17. jsonGenerator.writeObject(map);  
  18. System.out.println("");  
  19. System.out.println("objectMapper");  
  20. objectMapper.writeValue(System.out, map);  
  21. catch (IOException e) {  
  22. e.printStackTrace();  
  23. }  

转换后结果如下:

 
 
  1. jsonGenerator  
  2. {"account2":{"address":"china-Beijin","name":null,"id":0,"birthday":null,"email":"hoojo@qq.com"},"name":"hoojo",  
  3. "account":{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"}}  
  4. objectMapper  
  5. {"account2":{"address":"china-Beijin","name":null,"id":0,"birthday":null,"email":"hoojo@qq.com"},"name":"hoojo",  
  6. "account":{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"}} 

3、 将List集合转换成json

 
 
  1. /**  
  2. * <b>function:</b>将list集合转换成json字符串  
  3. * @author hoojo  
  4. * @createDate 2010-11-23 下午06:05:59  
  5. */ 
  6. @Test 
  7. public void writeListJSON() {  
  8. try {  
  9. List<AccountBean> list = new ArrayList<AccountBean>();  
  10. list.add(bean);  
  11. bean = new AccountBean();  
  12. bean.setId(2);  
  13. bean.setAddress("address2");  
  14. bean.setEmail("email2");  
  15. bean.setName("haha2");  
  16. list.add(bean);  
  17. System.out.println("jsonGenerator");  
  18. //list转换成JSON字符串  
  19. jsonGenerator.writeObject(list);  
  20. System.out.println();  
  21. System.out.println("ObjectMapper");  
  22. //用objectMapper直接返回list转换成的JSON字符串  
  23. System.out.println("1###" + objectMapper.writeValueAsString(list));  
  24. System.out.print("2###");  
  25. //objectMapper list转换成JSON字符串  
  26. objectMapper.writeValue(System.out, list);  
  27. catch (IOException e) {  
  28. e.printStackTrace();  
  29. }  

结果如下:

 
 
  1. jsonGenerator  
  2. [{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"},  
  3. {"address":"address2","name":"haha2","id":2,"birthday":null,"email":"email2"}]  
  4. ObjectMapper  
  5. 1###[{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"},  
  6. {"address":"address2","name":"haha2","id":2,"birthday":null,"email":"email2"}]  
  7. 2###[{"address":"china-Guangzhou","name":"hoojo","id":1,"birthday":null,"email":"hoojo_@126.com"},  
  8. {"address":"address2","name":"haha2","id":2,"birthday":null,"email":"email2"}] 

外面就是多了个[]中括号;同样Array也可以转换,转换的JSON和上面的结果是一样的,这里就不再转换了。~.~

4、下面来看看jackson提供的一些类型,用这些类型完成json转换;如果你使用这些类型转换JSON的话,那么你即使没有JavaBean(Entity)也可以完成复杂的Java类型的JSON转换。下面用到这些类型构建一个复杂的Java对象,并完成JSON转换。

 
 
  1. @Test 
  2. public void writeOthersJSON() {  
  3. try {  
  4. String[] arr = { "a""b""c" };  
  5. System.out.println("jsonGenerator");  
  6. String str = "hello world jackson!";  
  7. //byte  
  8. jsonGenerator.writeBinary(str.getBytes());  
  9. //boolean  
  10. jsonGenerator.writeBoolean(true);  
  11. //null  
  12. jsonGenerator.writeNull();  
  13. //float  
  14. jsonGenerator.writeNumber(2.2f);  
  15. //char  
  16. jsonGenerator.writeRaw("c");  
  17. //String  
  18. jsonGenerator.writeRaw(str, 510);  
  19. //String  
  20. jsonGenerator.writeRawValue(str, 55);  
  21. //String  
  22. jsonGenerator.writeString(str);  
  23. jsonGenerator.writeTree(JsonNodeFactory.instance.POJONode(str));  
  24. System.out.println();  
  25. //Object  
  26. jsonGenerator.writeStartObject();//{  
  27. jsonGenerator.writeObjectFieldStart("user");//user:{  
  28. jsonGenerator.writeStringField("name""jackson");//name:jackson  
  29. jsonGenerator.writeBooleanField("sex"true);//sex:true  
  30. jsonGenerator.writeNumberField("age"22);//age:22  
  31. jsonGenerator.writeEndObject();//}  
  32. jsonGenerator.writeArrayFieldStart("infos");//infos:[  
  33. jsonGenerator.writeNumber(22);//22  
  34. jsonGenerator.writeString("this is array");//this is array  
  35. jsonGenerator.writeEndArray();//]  
  36. jsonGenerator.writeEndObject();//}  
  37. AccountBean bean = new AccountBean();  
  38. bean.setAddress("address");  
  39. bean.setEmail("email");  
  40. bean.setId(1);  
  41. bean.setName("haha");  
  42. //complex Object  
  43. jsonGenerator.writeStartObject();//{  
  44. jsonGenerator.writeObjectField("user", bean);//user:{bean}  
  45. jsonGenerator.writeObjectField("infos", arr);//infos:[array]  
  46. jsonGenerator.writeEndObject();//}  
  47. catch (Exception e) {  
  48. e.printStackTrace();  
  49. }  

运行后,结果如下:

 
 
  1. jsonGenerator  
  2. "aGVsbG8gd29ybGQgamFja3NvbiE=" true null 2.2c world jac worl "hello world jackson!" "hello world jackson!" 
  3. {"user":{"name":"jackson","sex":true,"age":22},"infos":[22,"this is array"]}   
  4. {"user":{"address":"address","name":"haha","id":1,"birthday":null,"email":"email"},"infos":["a","b","c"]} 

怎么样?构造的json字符串和输出的结果是一致的吧。关键看懂用JSONGenerator提供的方法,完成一个Object的构建。



http://developer.51cto.com/art/201104/257074_2.htm

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值