文章目錄
- 一、Jackson官方定義
-
- 1.1、JsonNode
- 1.2、ArrayNode
- 1.3 ObjectNode
- 二、Josn字元串轉換
-
- 2.1 Json轉JsonNode
- 2.2 擷取集合中的節點
- 2.3 修改Json中節點的值
- 完整示例
一、Jackson官方定義
1.1、JsonNode
Base class for all JSON nodes, which form the basis of JSON Tree Model that Jackson implements. One way to think of these nodes is to consider them similar to DOM nodes in XML DOM trees.
所有JSON節點的基類,它構成Jackson實作的JSON樹模型的基礎。考慮這些節點的一種方法是将它們視為類似于XML DOM樹中的DOM節點。
1.2、ArrayNode
Node class that represents Arrays mapped from JSON content.
表示從JSON内容映射的數組的節點類。
1.3 ObjectNode
Node that maps to JSON Object structures in JSON content.
映射到JSON内容中的JSON對象結構的節點。
二、Josn字元串轉換
2.1 Json轉JsonNode
String json = "{\n" +
" \"test\":[\n" +
" {\n" +
" \"parkCode\":\"P000001\",\n" +
" \"serviceName\":\"deviceConfigSync1\"\n" +
" },\n" +
" {\n" +
" \"parkCode\":\"P000002\",\n" +
" \"serviceName\":\"deviceConfigSync2\"\n" +
" }\n" +
" ]\n" +
"}";
JsonNode node = new ObjectMapper().readTree(json);
我們看到轉換後的node是個有序HashMap,而子節點數組變成一個有序集合。
2.2 擷取集合中的節點
ArrayNode arrayNode = (ArrayNode) node.get("test");
JsonNode jsonNode = arrayNode.get(0);
首先我們要獲得集合的根節點,然後再擷取集合中的單獨節點
2.3 修改Json中節點的值
ObjectNode objectNode = (ObjectNode) jsonNode;
((ObjectNode) jsonNode).put("parkCode", "P000003");
arrayNode.add(objectNode);
arrayNode.remove(0);
1、我們将Node轉換成ObjectNode 。JsonNode是隻讀抽象類,不能直接建構JsonNode執行個體的對象,需要建立JsonNode的子類ObjectNode執行個體的對象。
2、修改預修改節點的值
3、将修改後的結果放到集合中
4、删除預修改的節點
完整示例
String json = "{\n" +
" \"test\":[\n" +
" {\n" +
" \"parkCode\":\"P000001\",\n" +
" \"serviceName\":\"deviceConfigSync1\"\n" +
" },\n" +
" {\n" +
" \"parkCode\":\"P000002\",\n" +
" \"serviceName\":\"deviceConfigSync2\"\n" +
" }\n" +
" ]\n" +
"}";
JsonNode node = new ObjectMapper().readTree(json);
ArrayNode arrayNode = (ArrayNode) node.get("test");
JsonNode jsonNode = arrayNode.get(0);
ObjectNode objectNode = (ObjectNode) jsonNode;
((ObjectNode) jsonNode).put("parkCode", "P000003");
arrayNode.add(objectNode);
arrayNode.remove(0);
System.out.println("替換前:" + new ObjectMapper().readTree(json));
System.out.println("替換後:" + node);
控制台輸出
替換前:{"test":[{"parkCode":"P000001","serviceName":"deviceConfigSync1"},{"parkCode":"P000002","serviceName":"deviceConfigSync2"}]}
替換後:{"test":[{"parkCode":"P000002","serviceName":"deviceConfigSync2"},{"parkCode":"P000003","serviceName":"deviceConfigSync1"}]}