一些规则
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
| String jsonString = objectMapper.writeValueAsString(object);
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);
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” }));