Jackson学习二之集合类对象与JSON互相转化

本篇主要演示如何使用Jackson对List, Map和数组与JSON互相转换.
Java代码  收藏代码
package com.jingshou.jackson; 
 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.Arrays; 
import java.util.Date; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 
 
import com.fasterxml.jackson.databind.ObjectMapper; 
import com.jingshou.pojo.Student; 
 
public class JacksonTest2 { 
 
    public static void main(String[] args) throws IOException { 
        Student student1 = new Student();   
        student1.setId(5237); 
        student1.setName("jingshou"); 
        student1.setBirthDay(new Date()); 
         
        Student student3 = new Student();   
        student3.setId(5117);   
        student3.setName("saiya");   
        student3.setBirthDay(new Date());   
         
        ObjectMapper mapper = new ObjectMapper(); 
           
        //Convert between List and JSON 
        List<Student> stuList = new ArrayList<Student>(); 
        stuList.add(student1); 
        stuList.add(student3); 
        String jsonfromList = mapper.writeValueAsString(stuList); 
        System.out.println(jsonfromList); 
         
        //List Type is not required here. 
        List stuList2 = mapper.readValue(jsonfromList, List.class); 
        System.out.println(stuList2);     
        System.out.println("************************************"); 
         
        //Convert Map to JSON 
        Map<String, Object> map = new HashMap<String, Object>(); 
        map.put("studentList", stuList); 
        map.put("class", "ClassName"); 
        String jsonfromMap =  mapper.writeValueAsString(map); 
        System.out.println(jsonfromMap); 
         
        Map map2 =  mapper.readValue(jsonfromMap, Map.class); 
        System.out.println(map2); 
        System.out.println(map2.get("studentList"));     
        System.out.println("************************************");    
         
        //Convert Array to JSON 
        Student[] stuArr = {student1, student3}; 
        String jsonfromArr =  mapper.writeValueAsString(stuArr); 
        System.out.println(jsonfromArr);  
        Student[] stuArr2 =  mapper.readValue(jsonfromArr, Student[].class); 
        System.out.println(Arrays.toString(stuArr2)); 
    } 
 

运行结果:
Text代码  收藏代码
[{"id":5237,"name":"jingshou","birthDay":1389528275987},{"id":5117,"name":"saiya","birthDay":1389528275987}] 
[{id=5237, name=jingshou, birthDay=1389528275987}, {id=5117, name=saiya, birthDay=1389528275987}] 
************************************ 
{"class":"ClassName","studentList":[{"id":5237,"name":"jingshou","birthDay":1389528275987},{"id":5117,"name":"saiya","birthDay":1389528275987}]} 
{class=ClassName, studentList=[{id=5237, name=jingshou, birthDay=1389528275987}, {id=5117, name=saiya, birthDay=1389528275987}]} 
[{id=5237, name=jingshou, birthDay=1389528275987}, {id=5117, name=saiya, birthDay=1389528275987}] 
************************************ 
[{"id":5237,"name":"jingshou","birthDay":1389528275987},{"id":5117,"name":"saiya","birthDay":1389528275987}] 
[Student [birthDay=Sun Jan 12 20:04:35 CST 2014, id=5237, name=jingshou], Student [birthDay=Sun Jan 12 20:04:35 CST 2014, id=5117, name=saiya]] 

再举一例实际应用:
小米网站注册页面输入邮件地址后,服务器提交的Ajax请求是:
https://account.xiaomi.com/pass/user@externalIdBinded?externalId=9999999%40qq.com&type=EM
服务器的返回是: &&&START&&&{"result":"ok","description":"成功","data":{"userId":-1},"code":0}
我们可以尝试用Map去读取后面那一段JSON
Java代码  收藏代码
package com.jingshou.jackson; 
 
import java.io.IOException; 
import java.util.Map; 
 
import com.fasterxml.jackson.core.JsonParseException; 
import com.fasterxml.jackson.databind.JsonMappingException; 
import com.fasterxml.jackson.databind.ObjectMapper; 
 
public class JacksonTest3 { 
 
    public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException { 
        String json = "{\"result\":\"ok\",\"description\":\"成功\",\"data\":{\"userId\":-1},\"code\":0}"; 
        ObjectMapper mapper = new ObjectMapper(); 
        Map map = mapper.readValue(json, Map.class); 
          //输出 {result=ok, description=成功, data={userId=-1}, code=0} 
        System.out.println(map); 
          //输出{userId=-1} 
        Map dataMap = (Map) map.get("data"); 
        System.out.println(dataMap);         
    } 
 


可见以Key-Value形式的JSON字符串,都可以直接使用Map成功读取出来

转自:http://lijingshou.iteye.com/blog/2003059

猜你喜欢

转载自rd-030.iteye.com/blog/2295842