jackson 官网 java_jackson

[TOC]

# 导包

Jackson包含一个core JAR,和两个依赖core JAR的JAR:

* Jackson Core

* Jackson Annotations

* Jackson Databind

其中Jackson Annotations依赖Jackson Core,Jackson Databind依赖Jackson Annotations。

~~~

com.fasterxml.jackson.core

jackson-databind

2.10.0

com.fasterxml.jackson.core

jackson-annotations

2.10.0

com.fasterxml.jackson.core

jackson-core

2.10.0

~~~

# 简介

Jackson提供了两种不同的JSON解析器:

1. ObjectMapper:把JSON解析到自定义的Java类中,或者解析到一个Jackson指定的树形结构中(Tree model)。

2. Jackson JsonParser:一种“拉式”(pull)解析器,每次解析一组JSON数据。

Jackson也包含了两种不同的JSON生成器

# Jackson配置

在调用 writeValue 或调用 readValue 方法之前,往往需要设置 ObjectMapper 的相关配置信息。这些配置信息应用 java 对象的所有属性上。示例如下:

~~~

//在反序列化时忽略在 json 中存在但 Java 对象不存在的属性

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,

false);

//在序列化时日期格式默认为 yyyy-MM-dd'T'HH:mm:ss.SSSZ ,比如如果一个类中有private Date date;这种日期属性,序列化后为:{"date" : 1413800730456},若不为true,则为{"date" : "2014-10-20T10:26:06.604+0000"}

mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS,false);

//在序列化时忽略值为 null 的属性

mapper.setSerializationInclusion(Include.NON_NULL);

//忽略值为默认值的属性

mapper.setDefaultPropertyInclusion(Include.NON_DEFAULT);

// 美化输出

mapper.enable(SerializationFeature.INDENT_OUTPUT);

// 允许序列化空的POJO类

// (否则会抛出异常)

mapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);

// 把java.util.Date, Calendar输出为数字(时间戳)

mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS);

// 在遇到未知属性的时候不抛出异常

mapper.disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);

// 强制JSON 空字符串("")转换为null对象值:

mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);

// 在JSON中允许C/C++ 样式的注释(非标准,默认禁用)

mapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true);

// 允许没有引号的字段名(非标准)

mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);

// 允许单引号(非标准)

mapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true);

// 强制转义非ASCII字符

mapper.configure(JsonGenerator.Feature.ESCAPE_NON_ASCII, true);

// 将内容包裹为一个JSON属性,属性名由@JsonRootName注解指定

mapper.configure(SerializationFeature.WRAP_ROOT_VALUE, true);

//序列化枚举是以toString()来输出,默认false,即默认以name()来输出

mapper.configure(SerializationFeature.WRITE_ENUMS_USING_TO_STRING,true);

//序列化Map时对key进行排序操作,默认false

mapper.configure(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS,true);

//序列化char[]时以json数组输出,默认false

mapper.configure(SerializationFeature.WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS,true);

//序列化BigDecimal时之间输出原始数字还是科学计数,默认false,即是否以toPlainString()科学计数方式来输出

mapper.configure(SerializationFeature.WRITE_CHAR_ARRAYS_AS_JSON_ARRAYS,true);

~~~

# java转json

ObjectMapper提供了三种方法转换

~~~

writeValue()

writeValueAsString()

writeValueAsBytes()

~~~

~~~

//创建JackSon的核心对象, ObjectMapper

ObjectMapper mapper = new ObjectMapper();

/**

* 转换方法

* writeValue(参数1, obj):

* 参数1:

* File: 将obj对象转换为json字符串,并保存到指定的文件中

* Writer: 将obj对象转换为json字符串,并将json数据填充到字符输出流中

* OutputStream: 将obj对象转换为json字符串,并将json数据填充到字节输出流中

*

* writeValueAsString(obj): 将对象转为json字符串

*/

String s = mapper.writeValueAsString(person);

System.out.println(s); //{"name":"xjd","id":1,"birthday":1571416610414}

//把json写入到文件

<

你可能感兴趣的:(jackson,官网,java)