文章目錄
jackson 介紹
官方地址: https://github.com/FasterXML/jackson-core
常用使用方法
maven引入
<properties>
<jackson-version>2.9.9</jackson-version>
</properties>
...
<dependencyManagement>
<dependencies>
<!--jackson-->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson-version}</version>
</dependency>
JAVA對象轉JSON[JSON序列化]
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序列,並把結果輸出成字符串。
JSON轉Java類[JSON反序列化]
JSON轉對象
objectMapping.readValue(str, ojb.class)
-
如果json字符串中的屬性個數小於java對象中的屬性個數,可以順利轉換,java中多的那個屬性爲null
-
如果json字符串中出現java對象中沒有的屬性,則在將json轉換爲java對象時會報錯:Unrecognized field, not marked as ignorable
demo
public class JacksonTest {
public static void main(String args[]) {
Student student = new Student();
student.setAge(20);
student.setName("she");
ObjectMapper mapper = new ObjectMapper();
try {
//Java類轉JSON
String json = mapper.writeValueAsString(student);
System.out.println(json);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
//Java集合轉JSON
List<Student> studentList = new ArrayList<Student>();
studentList.add(student);
String jsonlist = null;
try {
jsonlist = mapper.writeValueAsString(studentList);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
System.out.println(jsonlist);
String json = "{\"name\":\"she\",\"age\":20}";
/**
* ObjectMapper支持從byte[]、File、InputStream、字符串等數據的JSON反序列化。
*/
ObjectMapper mapper1 = new ObjectMapper();
Student student1 = null;
try {
student1 = mapper1.readValue(json, Student.class);
} catch (IOException e) {
e.printStackTrace();
}
System.out.println(student1);
}
static class Student {
private String name;
private int age;
public Student() {
}
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;
}
}
}
SpringBoot Jackson
SpringBoot JSON工具包默認是Jackson,只需要引入spring-boot-starter-web依賴包,自動引如下相應依賴包:
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> -->數據綁定依賴於下面兩個包
<version>2.8.7</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId> -->註解包
<version>2.8.0</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId> -->核心包
<version>2.8.7</version>
</dependency>
Jackson兩種配置方式
- application.properties文件
# 日期格式化
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
# 日期時區
spring.jackson.time-zone=GMT+8
# 返回值null不顯示
spring.jackson.default-property-inclusion=non_null
- bean配置
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
@Configuration
public class JacksonConfig {
@Bean
@Primary
@ConditionalOnMissingBean(ObjectMapper.class)
public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
ObjectMapper objectMapper = builder.createXmlMapper(false).build();
// 返回值過濾null或""值
objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY).setSerializationInclusion(JsonInclude.Include.NON_NULL);
return objectMapper;
}
}