利用Jackson处理json需要导入的jar包(2以上版本的):
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-smile</artifactId>
<version>2.3.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.3.3</version>
</dependency>
<!-- Support for JAX-B annotations as additional configuration -->
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>2.3.3</version>
</dependency>
测试代码:
@Test
public void writeEntity2JSON() throws JsonProcessingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
Person person = new Person();
person.setId(1);
person.setName("zhangsan");
person.setEmail("zhangsan@126.com");
/**
* ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
* ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。
* writeValue(File file, Object arg1)把arg1转成json序列,并保存到file文件中。
* writeValue(OutputStream out, Object arg1)把arg1转成json序列,并保存到out输出流中。
* writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。
* writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。
*/
String jsonStr=objectMapper.writeValueAsString(person);
System.out.println(jsonStr);
}
@Test
public void readJson2Entity() throws JsonParseException, JsonMappingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
String json = "{\"id\":1,\"name\":\"haha\",\"email\":\"email\"}";
Person acc = objectMapper.readValue(json, Person.class);
System.out.println(acc);
}
@Test
public void readJson2Map() throws JsonParseException, JsonMappingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
String json = "{\"A\":{\"id\":1,\"name\":\"zhangsan\",\"email\":\"zhangsan@126.com\"},\"B\":{\"id\":2,\"name\":\"lisi\",\"email\":\"lisi@126.com\"},\"success\":true}";
@SuppressWarnings("unchecked")
Map<String, Map<String, Object>> maps = objectMapper.readValue(json, Map.class);
System.out.println(maps);
}
@Test
public void readJson2List() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
String json = "[{\"id\":1,\"name\":\"zhangsan\",\"email\":\"zhangsan@126.comemail\"},{\"id\":2,\"name\":\"lisi\",\"email\":\"lisi@126.com\"}]";
@SuppressWarnings("unchecked")
List<LinkedHashMap<String, Object>> list = objectMapper.readValue(json, List.class);
System.out.println(list);
}
@Test
public void readJson2Array() throws JsonParseException, JsonMappingException, IOException {
ObjectMapper objectMapper = new ObjectMapper();
String json = "[{\"id\":1,\"name\":\"zhangsan\",\"email\":\"zhangsan@126.com\"},{\"id\":2,\"name\":\"lisi\",\"email\":\"lisi@126.com\"}]";
Person[] arr = objectMapper.readValue(json, Person[].class);
System.out.println(arr.length);
}
其实主要用到了两个方法:
转换成json对象或者说json字符串时,用objectMapper的writeValueAsString()方法或是writeValue()重载方法(objectMapper只需通过无参构造器new出来)
转换json字符串时用objectMapperd的readValue(String content, Class<T> valueType),直接得到JavaBean对象,中间并没有转换成Json对象环节。
一个writeValueAsString(),一个是readValue(),对应的,很好记。