Java下常见的Json类库有Gson、JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的JSON操作方法。
一、项目环境准备
Jackson有1.x系列和2.x系列,2.x系列有3个jar包需要下载:
- jackson-core-2.8.0.jar(核心jar包)- jackson-annotations-2.8.0.jar(该包提供Json注解支持)- jackson-databind-2.8.0.jar
由于我们使用的是maven项目
,所以,我们需要导入以下的依赖。
<!-- log end -->
<!-- 映入JSON -->
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.13</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.8.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.8.0</version>
</dependency>
接下来,我们再创建一个
User用户实体
,如果我们需要进行网络数据的传递的话,我们最好还是实现序列号接口。
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
* @author 思海
* @date 2018/5/30 10:48
*/
public class User implements Serializable {<!-- -->
private Integer id;
private String email;
private String password;
private String username;
private String role;
private Integer status;
private Date regTime;
private String regIp;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Date getRegTime() {
return regTime;
}
public void setRegTime(Date regTime) {
this.regTime = regTime;
}
public String getRegIp() {
return regIp;
}
public void setRegIp(String regIp) {
this.regIp = regIp;
}
}
二、JAVA对象转JSON[JSON序列化]
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonDemo {<!-- -->
public static void main(String[] args) throws ParseException, IOException {
User user = new User();
user.setUsername("sihai");
user.setEmail("sihai@163.com");
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
user.setBirthday(dateformat.parse("1994-10-01"));
/**
* ObjectMapper是JSON操作的核心,Jackson的所有JSON操作都是在ObjectMapper中实现。
* ObjectMapper有多个JSON序列化的方法,可以把JSON字符串保存File、OutputStream等不同的介质中。
* writeValue(File arg0, Object arg1)把arg1转成json序列,并保存到arg0文件中。
* writeValue(OutputStream arg0, Object arg1)把arg1转成json序列,并保存到arg0输出流中。
* writeValueAsBytes(Object arg0)把arg0转成json序列,并把结果输出成字节数组。
* writeValueAsString(Object arg0)把arg0转成json序列,并把结果输出成字符串。
*/
ObjectMapper mapper = new ObjectMapper();
//User类转JSON
String json = mapper.writeValueAsString(user);
System.out.println(json);
//Java集合转JSON
List<User> users = new ArrayList<User>();
users.add(user);
String jsonlist = mapper.writeValueAsString(users);
System.out.println(jsonlist);
}
}
三、JSON转JAVA类[JSON反序列化]
public class JacksonDemo {<!-- -->
public static void main(String[] args) throws ParseException, IOException {
String json = "{\"username\":\"sihai\",\"password\":\"sihai\",\"email\":\"sihai@163.com\"}";
/**
* ObjectMapper支持从byte[]、File、InputStream、字符串等数据的JSON反序列化。
*/
ObjectMapper mapper = new ObjectMapper();
User user = mapper.readValue(json, User.class);
System.out.println(user);
}
}
以上的方法还有其他的API可以使用,具体的API可以去查看API文档,这里不一一举例了。
四、JSON注解
Jackson提供了一系列注解,方便对JSON序列化和反序列化进行控制,下面介绍一些常用的注解。
@JsonIgnore
此注解用于属性上,作用是进行JSON操作时忽略该属性。-@JsonFormat
此注解用于属性上,作用是把Date类型直接转化为想要的格式,如@JsonFormat(pattern = “yyyy-MM-dd HH-mm-ss”)。-@JsonProperty
此注解用于属性上,作用是把该属性的名称序列化为另外一个名称,如把trueName属性序列化为name,@JsonProperty(“name”)。
```
package com.sihai.shop.user.entity;
import javax.persistence.*;
import java.io.Serializable;
import java.util.Date;
/**
- @author 思海
- @date 2018/5/30 10:48
*/
public class User implements Serializable {
private Integer id;
private String email;
//不JSON序列化年龄属性
@JsonIgnore
private String password;
private String username;
private String role;
private Integer status;
//格式化日期属性
@JsonFormat(pattern = "yyyy年MM月dd日")
private Date regTime;
private String regIp;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getRole() {
return role;
}
public void setRole(String role) {
this.role = role;
}
public Integer getStatus() {
return status;
}
public void setStatus(Integer status) {
this.status = status;
}
public Date getRegTime() {
return regTime;
}
public void setRegTime(Date regTime) {
this.regTime = regTime;
}
public String getRegIp() {
return regIp;
}
public void setRegIp(String regIp) {
this.regIp = regIp;
}
}
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
public class JacksonDemo {
public static void main(String[] args) throws ParseException, IOException {
User user = new User();
user.setUsername("sihai");
user.setEmail("sihai@163.com");
SimpleDateFormat dateformat = new SimpleDateFormat("yyyy-MM-dd");
user.setRegTime(dateformat.parse("1994-10-01"));
ObjectMapper mapper = new ObjectMapper();
String json = mapper.writeValueAsString(user);
System.out.println(json);
}
}
```
这就是jackson的大概的使用方法了。