Len's Study-Log

集中一点,登峰造极!

0%

Jackson 随笔


一些规则

JsonNode 对象是不可变的,要修改内容,就需要 JsonNode 的子类 ObjectNode。

一些注意事项

ObjectMapper 对象可以从 Spring 容器注入:

1
2
@Resource
private ObjectMapper objectMapper;

要修改 JSON 节点,就要把 JsonNode 转换成 ObjectNode。


Jackson 常用操作示例

生成JSON对象

1
2
3
ObjectNode studentNode = objectMapper.createObjectNode();
positionNode.put("name", "Len");
positionNode.put("age", 18);

生成JSON数组对象

1
2
ArrayNode classNode = objectMapper.createArrayNode();
classNode.add(studentNode);

JSON字符串转JSON对象

1
2
String jsonStr = "{\"name\":\"Len\", \"age\":\"18\"}";
JsonNode jsonNode = mapper.readTree(jsonStr);

JSON字符串转Java对象

1
Person person = objectMapper.readValue(jsonStr,Person.class);

转JSON字符串

1
2
3
4
5
// object 可以是单个对象,也可以是集合对象    
String jsonString = objectMapper.writeValueAsString(object);

// 美化json输出格式
String beautifyJsonStr = jsonobjectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonNode);

JSON对象转Java对象

1
Person person = objectMapper.treeToValue(objectNode,Person.class);

Java对象转JSON对象

1
2
3
4
5
String json = objectMapper.writeValueAsString(object);
JsonNode jsonNode = objectMapper.readTree(json);

// 从Jackson 1.6开始,可以这样写
JsonNode node = objectMapper.valueToTree(map);

Java对象数组转JSON对象

1
2
3
4
5
6
7
8
JsonNode jsonArr = objectMapper.valueToTree(javaArr);
if(jsonArr.isArray()){
System.out.println("### json转java对象");
for (JsonNode node : jsonArr) {
System.out.println(node.get("name").asText());
System.out.println(node.get("age").asLong());
}
}

JSON数组转Java对象数组

1
List<Person> personList = mapper.readValue(jsonArr.traverse(),new TypeReference<List<Person>>() {});

Jackson 常用注解

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") 定义日期时间格式;

@JsonProperty("keyName") 转换成json字符串的时候,用 keyName ;

@JsonIgnore 忽略某个字段,该字段不会被转换成 JSON 字符串 (或者在类上添加注解:@JsonIgnoreProperties({ “foo”, “bar” }));