【json】Jackson的使用
Jackson所有的操作都是通过ObjectMapper对象实例来操作的,可以重用这个对象实例。
首先定义一个实例:
ObjectMapper mapper = new ObjectMapper();
定义一个Student类:
package jackson;
import java.util.Date;
public class Student {
private String name;
private int age;
private String position;
private Date createTime;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", position="
+ position + ", createTime=" + createTime + "]";
}
}
准备一个字符串:
String jsonString = "{\"name\":\"king\",\"age\":21}";
常规操作: 字符串转对象
mapper.readValue(jsonString,Student.class);
System.out.println(student);
打印输出结果:
Student [name=king, age=21, position=null, createTime=null]
常规操作: 对象转字符串
student.setCreateTime(new Date());
String json = mapper.writeValueAsString(student);
System.out.println(json);
打印输出结果:
{"name":"king","age":21,"position":null,"createTime":1524819355361}
如何改变输出的日期字段格式?
两种方式:一种SimpleDateFormat,另外一种通过在属性字段注解
在Student.java属性字段createTime注解@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
import com.fasterxml.jackson.annotation.JsonFormat;
public class Student {
private String name;
private int age;
private String position;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
//省略get,set
}
打印输出结果:
{"name":"king","age":21,"position":null,"createTime":"2018-04-27 09:00:56"}
8小时时间差问题:上面打印结果发现,时间少8小时。
解决方法: 注解上增加时区。
public class Student {
private String name;
private int age;
private String position;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
//省略get,set
}
打印输出结果:
{"name":"king","age":21,"position":null,"createTime":"2018-04-27 17:07:33"}
其他的一些奇怪的配置
- 输出格式化,就是分行显示,该功能慎用:
mapper.configure(SerializationFeature.INDENT_OUTPUT, true);
打印输出样式
{
"name" : "king",
"age" : 21,
"position" : null,
"createTime" : "2018-04-27 17:29:01"
}
- 异常忽略
字符串转对象时,如果字符串中字段在对象中不存在,则忽略该字段@JsonIgnoreProperties(ignoreUnknown = true)
public class Student { private String name;
private int age;
private String position;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
//省略get,set
}
3.其他注解
@JsonIgnore 用来忽略某些字段,可以用在Field或者Getter方法上,用在Setter方法时,和Filed效果一样。
@JsonIgnoreProperties(ignoreUnknown = true) 将这个注解写在类上之后,就会忽略类中不存在的字段
@JsonIgnoreProperties({ "internalId", "secretKey" }) 将这个注解写在类上之后,指定的字段不会被序列化和反序列化。
`objectMapper.configure(SerializationFeature.WRAP_ROOT_VALUE,true);` ***添加这个配置后,输出时自动将类名作为根元素。***
````输出如下:
`{"Student":{"name":"king","age":21,"position":null,"createTime":"2018-05-02 10:06:29"}}`
````
`@JsonRootName("myPojo")` ***将这个注解写在类上之后,根据指定的值生成根元素,作用类似于上面***
(博客园的这个markdown编辑器真不会用)
【json】Jackson的使用的更多相关文章
- Json --- Jackson工具
一.Jackson简介 Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象.Jackson ...
- json jackson
1.引入依赖 <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId&g ...
- spray json, jackson 转到type时多key和少key的比较
有组合关系的三个class定义 A { B { C {...} ... } ... } 每个class都有loadFromJson和writeAsJson方法.过去几年,三个class里的成员变量一直 ...
- Jackson 框架,轻易转换JSON
Jackson 框架,轻易转换JSON Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在 ...
- Jackson 框架,轻易转换JSON【转】
Jackson 框架,轻易转换JSON Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json.xml转换成Java对象. 前面有介绍过json-lib这个框架,在 ...
- jackson json转对象 对象转json
一,Jackson使用示例 第1步:创建ObjectMapper对象. 创建ObjectMapper对象.它是一个可重复使用的对象. ObjectMapper mapper = new ObjectM ...
- Java之JSON操作(Jackson)
Java to JSON: package json.jackson; import bean.User; import com.fasterxml.jackson.databind.ObjectMa ...
- jackson java对象和json对象的互相转换
概述 Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”. Jackson框架包含了3个核心库:streaming,databind,annotation ...
- Java Jackson - Json Polymorphism
from://http://www.studytrails.com/java/json/java-jackson-Serialization-polymorphism.jsp Jackson prov ...
- Java解析json(二):jackson
Java解析json(二):jackson 官方参考 Jackson Home Page:https://github.com/FasterXML/jackson Jackson Wiki:htt ...
随机推荐
- RHEL7 - 从命令行管理文件
RHEL中重要的目录 位置 用途 /usr 安装的软件.共享的库,包括文件和静态只读程序数据.重要的子目录有: -/usr/bin:用户命令 -/usr/sbin:系统管理命令 -/usr/local ...
- WM_MOUSELEAVE 和 WM_MOUSEHOVER 使用
原文链接: http://www.cnblogs.com/weiqubo/archive/2011/04/14/2016323.html 默认情况下,窗口是不响应 WM_MOUSELEAVE 和 WM ...
- Python直接赋值、浅拷贝和深度拷贝解析
直接赋值:其实就是对象的引用(别名). 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象. 深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象 ...
- Python 元组 tuple() 方法
描述 Python 元组 tuple() 方法用于将可迭代对象(字符串.列表.元祖.字典)转换为元组. 语法 tuple() 方法语法: tuple(iterable) 参数 iterable -- ...
- OPENGL NEHE Lesson11 11课的计算公式推导
计算多边形公式推导: 条件x 离散的值从0到45; y离散的值从0到45; z是符合正弦波. 问题: 1 要求x’=f(x)映射到 x’ ∈[-4.5, 4.5], x ∈{0, 1, 2, …, 4 ...
- HDU 3395 Special Fish 最“大”费用最大流
求最大费用能够将边权取负以转化成求最小费用. 然而此时依旧不正确.由于会优先寻找最大流.可是答案并不一定出如今满流的时候.所以要加一些边(下图中的红边)使其在答案出现时满流. 设全部边的流量为1,花费 ...
- Golang Redis操作
1. Redis简介 Redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库. 1.1 特点 支持更多数据类型 和Memcached类似,它支持存 ...
- Lintcode记录
汇总贴 56. Two Sum[easy] 167. Add Two Numbers[easy] 53. Reverse Words in a String[easy] 82. Single Numb ...
- [转]解决 Eclipse项目红感叹号
原文地址:http://www.cnblogs.com/hakuci/archive/2012/01/06/2314143.html 原因:显示红色感叹号是因为jar包的路径不对 解决:在项目上右击B ...
- mysql 存入乱码问题
在使用mysql开发是,遇到一问题,java脚本里面的中文很正常,持久化之后数据库里面的数据则变成乱码,解决方式,在spring配置文件连接中加入指定编码格式,有些系统不需要,有些服务器系统需要,统一 ...