本篇主要演示如何使用Jackson对List, Map和数组与JSON互相转换.
- 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));
- }
- }
运行结果:
- [{"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
- 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成功读取出来