天天看點

Jackson修改json字元串一、Jackson官方定義二、Josn字元串轉換完整示例

文章目錄

  • 一、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);
           
Jackson修改json字元串一、Jackson官方定義二、Josn字元串轉換完整示例
我們看到轉換後的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"}]}