直接上代码

 package com.demo.jackson.utils;

 import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils; @Slf4j
public class JsonUtil {
private static ObjectMapper objectMapper = new ObjectMapper();
static {
//忽略 在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
} /**
* 对象转换成Sting
* @param obj
* @param <T>
* @return
*/
public static <T> String obj2String(T obj){
if (obj == null) {
return null;
}
try {
return obj instanceof String ? (String) obj : objectMapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
System.out.println("Parse Object to String error");
e.printStackTrace();
return null;
}
}
/**
* 规范地将对象转换成Sting
* @param obj
* @param <T>
* @return
*/
public static <T> String obj2StringPretty(T obj){
if(obj == null){
return null;
}
try {
return obj instanceof String ? (String)obj : objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(obj);
} catch (Exception e) {
log.warn("Parse Object to String error",e);
return null;
}
} /**
* String转换成obj对象
* @param str
* @param clazz
* @param <T>
* @return
*/
public static <T> T str2Obj(String str, Class<T> clazz){
if(str==null){
return null;
}
try {
return clazz.equals(String.class) ? (T) str : objectMapper.readValue(str, clazz);
} catch (Exception e) {
e.printStackTrace();
return null;
}
} /**
* String转换成对象
* @param str
* @param typeReference
* @param <T>
* @return
*/
public static <T> T string2Obj(String str, TypeReference<T> typeReference){
if(StringUtils.isEmpty(str) || typeReference == null){
return null;
}
try {
return (T)(typeReference.getType().equals(String.class)? str : objectMapper.readValue(str,typeReference));
} catch (Exception e) {
log.warn("Parse String to Object error",e);
return null;
}
} /**
* String转换成对象
* @param str
* @param collectionClass
* @param elementClasses
* @param <T>
* @return
*/
public static <T> T string2Obj(String str, Class<?> collectionClass, Class<?>... elementClasses){
JavaType javaType = objectMapper.getTypeFactory().constructParametricType(collectionClass,elementClasses);
try {
return objectMapper.readValue(str,javaType);
} catch (Exception e) {
log.warn("Parse String to Object error",e);
return null;
}
}
}

测试:

 package com.demo.jackson.test;

 import com.demo.jackson.entity.Student;
import com.demo.jackson.utils.JsonUtil;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Test; import java.util.*; @SuppressWarnings("ALL")
public class JacksonTest {
/**
* 序列化
*/
@Test
public void test01(){
Student s = new Student();
s.setName("cjj");
s.setAge(22);
s.setProfileImageUrl("link");
String s1 = JsonUtil.obj2String(s);
System.out.println(s1); Map<String, List<Integer>> map = new HashMap<>();
map.put("a", Arrays.asList(1, 2, 3));
map.put("b", Arrays.asList(1, 2, 3));
String result1 = JsonUtil.obj2StringPretty(map);
System.out.println(result1);
} /**
* 反序列化
*/
@Test
public void Test02(){
String str = "{\"name\":\"name\",\"age\":10,\"profileImageUrl\":\"link\"}";
Student student = JsonUtil.str2Obj(str, Student.class);
System.out.println(student);
}
@Test
public void test03() throws Exception { Student student1 = new Student();
student1.setAge(10);
student1.setName("name1");
student1.setProfileImageUrl("link1"); Student student2 = new Student();
student2.setAge(20);
student2.setName("name2");
student2.setProfileImageUrl("link2"); List<Student> studentList = new ArrayList<>();
studentList.add(student1);
studentList.add(student2);
String result = JsonUtil.obj2String(studentList);
// [{"name":"name1","age":10,"profileImageUrl":"link1"},{"name":"name2","age":20,"profileImageUrl":"link2"}]
System.out.println(result); List<Student> finalList = JsonUtil.string2Obj(result, new TypeReference<List<Student>>() {});
// [{name=name1, age=10, profileImageUrl=link1}, {name=name2, age=20, profileImageUrl=link2}]
System.out.println(finalList);
}
@Test
public void test04() throws Exception { Student student1 = new Student();
student1.setAge(10);
student1.setName("name1");
student1.setProfileImageUrl("link1"); Student student2 = new Student();
student2.setAge(20);
student2.setName("name2");
student2.setProfileImageUrl("link2"); List<Student> studentList = new ArrayList<>();
studentList.add(student1);
studentList.add(student2);
String result = JsonUtil.obj2String(studentList);
// [{"name":"name1","age":10,"profileImageUrl":"link1"},{"name":"name2","age":20,"profileImageUrl":"link2"}]
System.out.println(result); List<Student> finalList = JsonUtil.string2Obj(result, List.class, Student.class);
// [{name=name1, age=10, profileImageUrl=link1}, {name=name2, age=20, profileImageUrl=link2}]
System.out.println(finalList);
}
@Test
public void jsonProperty() throws Exception { String str = "{\"name\":\"name\",\"age\":10,\"setImage\":\"link\"}";
Student student1 = JsonUtil.string2Obj(str, Student.class);
// name
System.out.println(student1.getName());
//
System.out.println(student1.getAge());
// link
System.out.println(student1.getProfileImageUrl());
// {"name":"name","age":10,"getImage":"link"}
System.out.println(JsonUtil.obj2String(student1));
} /**
* 除了将json转为对象外,还可以用Tree Mode方式解析JSON,全程无脑操作,
* 除了一些特别复杂的JSON,或者只取JSON中的一部分,千万不要用这种二B方式解析JSON。
* 正确的方式是将JSON直接转为对象。
* @throws Exception
*/
@Test
public void parseJson() throws Exception {
String jsonStr = "{\"name\":\"zhansan\",\"age\":100,\"schools\":[{\"name\":\"tsinghua\",\"location\":\"beijing\"},{\"name\":\"pku\",\"location\":\"beijing\"}]}"; ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(jsonStr); String name = jsonNode.get("name").asText();
int age = jsonNode.get("age").asInt();
// name is zhansan age is 100
System.out.println("name is " + name + " age is " + age); JsonNode schoolsNode = jsonNode.get("schools");
for (int i = 0; i < schoolsNode.size(); i++) {
String schooleName = schoolsNode.get(i).get("name").asText();
String schooleLocation = schoolsNode.get(i).get("location").asText();
// schooleName is tsinghua schooleLocation is beijing
// schooleName is pku schooleLocation is beijing
System.out.println("schooleName is " + schooleName + " schooleLocation is " + schooleLocation);
}
}
}

jackson的应用的更多相关文章

  1. jackson简单使用,对象转json,json转对象,json转list

    添加jackson依赖: // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core compile g ...

  2. Jackson 通过自定义注解来控制json key的格式

    Jackson 通过自定义注解来控制json key的格式 最近我这边有一个需求就是需要把Bean中的某一些特殊字段的值进行替换.而这个替换过程是需要依赖一个第三方的dubbo服务的.为了使得这个转换 ...

  3. Jackson的简单用法

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1简介 Jackson具有比较高的序列化和反序列化效率,据测试,无论是 ...

  4. jackson error 含义log

    1. 反序列化失败,类型不匹配 Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserial ize ...

  5. jackson annotations注解详解

    jackson中常用到的注解 猛击下面的连接地址 http://blog.csdn.net/sdyy321/article/details/40298081

  6. jackson官方快速入门文档

    官方地址: http://jackson.codehaus.org/ http://wiki.fasterxml.com/JacksonInFiveMinutes http://wiki.faster ...

  7. Jackson将json字符串转换成泛型List

    Jackson,我感觉是在Java与Json之间相互转换的最快速的框架,当然Google的Gson也很不错,但是参照网上有人的性能测试,看起来还是Jackson比较快一点 Jackson处理一般的Ja ...

  8. 使用Jackson解析Json示例

    原文http://blog.csdn.net/gebitan505/article/details/17005735 custom.json: {     "country":&q ...

  9. Json解析工具Jackson(使用注解)

    原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...

  10. Json解析工具Jackson(简单应用)

    原文http://blog.csdn.net/nomousewch/article/details/8955796 概述 Jackson库(http://jackson.codehaus.org),是 ...

随机推荐

  1. [SPOJ1812]Longest Common Substring II 后缀自动机 多个串的最长公共子串

    题目链接:http://www.spoj.com/problems/LCS2/ 其实两个串的LCS会了,多个串的LCS也就差不多了. 我们先用一个串建立后缀自动机,然后其它的串在上面跑.跑的时候算出每 ...

  2. Vue 数组和对象更新,但是页面没有刷新

    在使用数组的时候,数组内部数据发生改变,但是与数组绑定的页面的数据却没有发生变化. <ul> <li v-for="(item,index) in todos" ...

  3. jquery 点击切换div

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. SpringBoot 快速开发框架

    学习资源:https://ke.qq.com/course/260513(这是Springboot升级版本教程,里面还有一个初级版本的) 1.第一个测试程序,那个覆盖方法加上@Override会报错, ...

  5. caffe blob理解

    blob数据结构是caffe中基本的数据存储单元,它主要存储的数据是网络中的中间数据变量,比如各层的输入和输出:代价函数关于网络各层参数的梯度. blob中除了存储数据外,还有一些标记数据的参数,以下 ...

  6. 时钟周期 VS 机器周期

    时钟周期vs机器周期 Clock cycle The speed of a computer processor, or CPU, is determined by the clock cycle, ...

  7. 【原】简单shell练习(三)

    1.软链 linux下的软链接类似于windows下的快捷方式 # ln -s /home/gamestat /gamestat  ln -s a b  中的 a 就是源文件(已经存在的文件),b是链 ...

  8. JAVA学习笔记16——控制线程

    Java的线程支持提供了一些便捷的工具方法,通过这些便捷的工具方法可以很好地控制线程执行.   join线程 Thread提供了让一个线程等待另一个线程完成的方法——join().当在某个线程执行流中 ...

  9. 第3节 mapreduce高级:10、11、分组求取topN

    只要修改OrderReducer.java的reduce方法,修改为: int i = 0;for(NullWritable nullWritable:values){ if(i>=2) bre ...

  10. js+flash(as3)实现复制文字内容到剪切板实例

    /* SWFObject v2.2 swfobject.js */ var swfobject=function(){var D="undefined",r="objec ...