jackson的应用
直接上代码
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的应用的更多相关文章
- jackson简单使用,对象转json,json转对象,json转list
添加jackson依赖: // https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core compile g ...
- Jackson 通过自定义注解来控制json key的格式
Jackson 通过自定义注解来控制json key的格式 最近我这边有一个需求就是需要把Bean中的某一些特殊字段的值进行替换.而这个替换过程是需要依赖一个第三方的dubbo服务的.为了使得这个转换 ...
- Jackson的简单用法
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1简介 Jackson具有比较高的序列化和反序列化效率,据测试,无论是 ...
- jackson error 含义log
1. 反序列化失败,类型不匹配 Caused by: com.fasterxml.jackson.databind.JsonMappingException: Can not deserial ize ...
- jackson annotations注解详解
jackson中常用到的注解 猛击下面的连接地址 http://blog.csdn.net/sdyy321/article/details/40298081
- jackson官方快速入门文档
官方地址: http://jackson.codehaus.org/ http://wiki.fasterxml.com/JacksonInFiveMinutes http://wiki.faster ...
- Jackson将json字符串转换成泛型List
Jackson,我感觉是在Java与Json之间相互转换的最快速的框架,当然Google的Gson也很不错,但是参照网上有人的性能测试,看起来还是Jackson比较快一点 Jackson处理一般的Ja ...
- 使用Jackson解析Json示例
原文http://blog.csdn.net/gebitan505/article/details/17005735 custom.json: { "country":&q ...
- Json解析工具Jackson(使用注解)
原文http://blog.csdn.net/nomousewch/article/details/8955796 接上一篇文章Json解析工具Jackson(简单应用),jackson在实际应用中给 ...
- Json解析工具Jackson(简单应用)
原文http://blog.csdn.net/nomousewch/article/details/8955796 概述 Jackson库(http://jackson.codehaus.org),是 ...
随机推荐
- 移动端展示pdf(在线打开pdf)
需求:在手机微信浏览器或者其他浏览器中打开pdf 准备:前端插件:查找pdf.js 官网地址:http://mozilla.github.io/pdf.js/ 在官网中下载demo 注释:pdf的d ...
- R in action读书笔记(8)-第八章:回归(上)
8.1回归的多面性 8.2 OLS回归 OLS回归拟合模型形式: 为了能够恰当地解释oLs模型的系数,数据必须满足以下统计假设. 口正态性对于固定的自变量值,因变量值成正态分布. 口独立性Yi值之间相 ...
- iOS 时间和时间戳之间转化
以毫秒为整数值的时间戳转换 时间戳转化为时间NSDate - (NSString *)timeWithTimeIntervalString:(NSString *)timeString { // 格式 ...
- CentOS 6.4 linux下编译安装 LNMP环境
1.nginx编译安装 2.PHP编译安装 3.mysql编译安装 4.NGINX配置模板 5.CentOS 6.4 php-fpm 添加service 添加平滑启动/重启
- H5 canvas-小球抛物线
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- ascii - 在八进制,十进制,十六进制中的 ASCII 字符集编码
描述 ASCII 是美国对于信息交换的标准代码,它是7位码,许多8位码(比如 ISO 8859-1, Linux 的默认字符集)容纳 ASCII 作为它们的下半部分.对应的国际 ASSII 是 ISO ...
- Java基础(十一)--Serializable和Externalizable接口实现序列化
序列化在日常开发中经常用到,特别是涉及到网络传输的时候,例如调用第三方接口,通过一个约定好的实体进行传输,这时你必须实现序列 化,这些都是大家都了解的内容,所以文章也会讲一下序列化的高级内容. 序列化 ...
- vue列表排序实现中的this问题
最近在看vue框架的知识,然后其中有个例子中的this的写法让我很疑惑 <!DOCTYPE html> <html> <head> <meta charset ...
- vsftp虚拟用户方式访问
需求:外部人员需要对公司服务器上某个文件夹内容进行读写操作 文件目录信息:/opt/abc drwxr-xr-x 9 www www 4096 12月 4 13:02 abc #注 ...
- 关于统一代码规范ResultBean<T>
之前看了一篇文章,是java团长的一篇代码规范的文章,很有启发.统一返回格式确实给开发带来方便和美感, 有时候Colltroller返回String或者什么Map,list什么的,虽然都转成json返 ...