方法详解
这里会列出常用方法的详解,更多方法可查阅jackson api文档
ObjectMapper类是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构
对象转json字符串
ObjectMapper 通过 writeValue 系列方法将 java 对象序列化为 json,并将 json 存储成不同的格式:String(writeValueAsString)、Byte Array(writeValueAsBytes)、Writer、File、OutStream、DataOutput。
ObjectMapper objectMapper = new ObjectMapper();构造ObjectMapper对象
objectMapper.writeValue(参数,obj);
//参数解析:
//File: 将对象转为json字符串,保存到指定的文件中
//Writer: 将对象转为json字符串,并将json数据填充到字符输出流中
// outputStream: 将对象转为json字符串,并将json数据填充到字节输出流中
objectMapper.writeValueAsString(obj)//将对象转为json字符
objectMapper.writeValueAsBytes(obj)//将对象转为json字符(byte数据格式)
SimpleDateFormat dateFormat = new SimpleDateFormat(“yyyy-MM-dd”);
objectMapper.setDateFormat(dateFormat);//支持时间转换成格式化的字符串
字符串转对象
ObjectMapper 通过 readValue 系列方法从不同的数据源: String、Byte Array、Reader、File、URL、InputStream 中反序列化为 java 对象。
Obj obj = objectMapper.readValue(参数, Obj.class);//json转对象
//参数可以是String,Reader,URL,File,InputStream ,Byte
json Tree模型
JsonNode 抽象类
ObjectNode 继承 JsonNode,可代替fastjson的JSONObject
ArrayNode 继承 JsonNode,可代替fastjson的JSONArray
JsonNode对象是不可变的,所以不能直接构建JsonNode实例的对象图,可以通过创建JsonNode 的子类ObjectNode实例的对象图
// JsonNode 对象
JsonNode jsonNode = objectMapper.readTree(json);
//ObjectNode对象
ObjectNode objectNode = objectMapper.createObjectNode();
objectNode.put(" “,” “);
objectNode.remove(” ");
//ObjectNode对象
ArrayNode arraynode = mapper.createArrayNode();
常用注解
@JsonIgnore 作用域属性或方法上
@JsonIgnore 用来告诉 Jackson 在序列化/反序列化时忽略该注解标注的 java pojo 属性
@JsonIgnore
private String name;
@JsonIgnoreProperties 作用在类上
@JsonIgnoreProperties 和 @JsonIgnore 的作用相同,都是告诉 Jackson 该忽略哪些属性,
不同之处是 @JsonIgnoreProperties 是类级别的,并且可以同时指定多个属性。
@JsonIgnoreProperties(value = {"字段1","字段2"})
public class Xxxx{。。。}
@JsonIgnoreType
@JsonIgnoreType 标注在类上,当其他类有该类作为属性时,该属性将被忽略
@JsonIgnoreType
public class Xxxx{。。。}
@JsonProperty
@JsonProperty 可以指定某个属性和json映射的名称。例如我们有个json字符串为{“user_name”:”xxxx”},
而java中命名要遵循驼峰规则,则为userName,这时通过@JsonProperty 注解来指定两者的映射规则即可。这个注解也比较常用。
@JsonProperty("user_name")
private String userName;
1
2
@JsonInclude
在将 java pojo 对象序列化成为 json 字符串时,使用 @JsonInclude 注解可以控制在哪些情况下才将被注解的属性转换成 json,例如只有属性不为 null 时。
@JsonInclude(JsonInclude.Include.NON_NULL)
private String username;
常用用法:
JsonJsonInclude.Include.ALWAYS 这个是默认策略,任何情况下都序列化该字段,和不写这个注解是一样的效果。
JsonJsonInclude.Include.NON_NULL 这个最常用,即如果加该注解的字段为null,那么就不序列化这个字段了。
JsonJsonInclude.Include.NON_ABSENT 这个包含NON_NULL,即为null的时候不序列化
JsonJsonInclude.Include.NON_DEFAULT 如果字段是默认值的话就不序列化。