自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Java對象轉(zhuǎn)JSON時如何動態(tài)的增刪改查屬性

開發(fā) 后端
日常開發(fā)中少不了 JSON 處理,少不了需要在 JSON 中添加額外字段或者刪除特定字段的需求。今天我們就使用Jackson類庫來實現(xiàn)這個功能。

[[349154]]

1. 前言

日常開發(fā)中少不了 JSON 處理,少不了需要在 JSON 中添加額外字段或者刪除特定字段的需求。今天我們就使用Jackson類庫來實現(xiàn)這個功能。

2. JSON 字符串增加額外字段

假如我們有這樣結(jié)構(gòu)的 JSON:

  1.     "username":"felord.cn"
  2.     "age":18 

期望增加一個性別字段gender:

  1.     "username""felord.cn"
  2.     "age": 18, 
  3.     "gender""male" 

首先使用ObjectMapper加載 JSON 字符串,為ObjectNode:

  1. ObjectNode jsonNodes = objectMapper.readValue(json, ObjectNode.class); 

ObjectNode提供了很多操作 JSON 屬性的方法:

  • get 根據(jù)索引或者字段名獲取對應(yīng)的JsonNode。
  • put 系列方法 提供了將基本類型、null值、對象、數(shù)組、原始值添加到 JSON 的能力。

正好我們可以借助于put方法來完成額外新增字段,完整的代碼片段:

  1. String json = "{\n" + 
  2.         "    \"username\":\"felord.cn\",\n" + 
  3.         "    \"age\":18\n" + 
  4.         "}"
  5.  
  6. ObjectMapper objectMapper = new ObjectMapper(); 
  7.  
  8. ObjectNode jsonNodes = objectMapper.readValue(json, ObjectNode.class); 
  9. jsonNodes.put("gender""male"); 
  10. String newJson = objectMapper.writeValueAsString(jsonNodes); 
  11. // newJson = {"username":"felord.cn","age":18,"gender":"male"

3. 對象轉(zhuǎn) JSON 時新增字段

有時候我們定義的對象沒有包含特定的字段,但是轉(zhuǎn)成 JSON 時同樣需要有額外的字段。跟章節(jié) 2類似,,只不過提供的不再是 JSON 字符串而是 Java 對象:

  1. /** 
  2.  * @author felord.cn 
  3.  * @since 11:02 
  4.  */ 
  5. @Data 
  6. public class User { 
  7.     private String username; 
  8.     private Integer age; 

其實思路很明確,只要我們能夠?qū)ο筠D(zhuǎn)換為ObjectNode就可以如法炮制。ObjectMapper提供了valueToTree方法可以實現(xiàn)這一點,所以對象轉(zhuǎn) JSON 時新增字段完整的 DEMO 為:

  1. User user = new User(); 
  2. user.setUsername("felord.cn"); 
  3. user.setAge(18); 
  4.  
  5. ObjectMapper objectMapper = new ObjectMapper(); 
  6. ObjectNode jsonNodes = objectMapper.valueToTree(user); 
  7. jsonNodes.put("gender""male"); 
  8. String newJson = objectMapper.writeValueAsString(jsonNodes); 
  9. // newJson = {"username":"felord.cn","age":18,"gender":"male"

4. 移除屬性

無論是 JSON 字符串或者 Java 對象轉(zhuǎn) JSON 時,移除屬性跟上面的思路一樣,只需要調(diào)用remove方法即可,這里不再演示。

5. 擴(kuò)展

上面的所有操作都是借助于了Jackson中的JsonNode派生的 JSON 節(jié)點類完成的,關(guān)系如下:

JsonNode

JsonNode可以細(xì)粒度的訪問 JSON 信息,提供了非常有用的 JSON 對象操作 API,但是很多人在有相關(guān)需求的時候并不能夠想到它,所以你不需要具體的記住這些 API,只需要記住它可以操作 JSON 即可。

6. 總結(jié)

本文對 Jackson 動態(tài)的增刪改查 JSON 進(jìn)行了介紹,牽引出一個很重要的操作工具JsonNode。充分利用手中已有的資源來解決問題,無需自己造輪子,也不必引入新的依賴。

本文轉(zhuǎn)載自微信公眾號「碼農(nóng)小胖哥」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請聯(lián)系碼農(nóng)小胖哥公眾號。

 

責(zé)任編輯:武曉燕 來源: 碼農(nóng)小胖哥
相關(guān)推薦

2023-02-27 07:37:56

Curl操作SQL

2012-03-21 09:49:42

Java

2023-06-08 08:13:43

2021-08-09 13:34:14

Python開發(fā)數(shù)據(jù)

2024-11-18 00:22:34

2019-11-07 15:39:36

數(shù)據(jù)庫MySQL文章

2012-04-19 10:06:16

ibmdw

2025-04-11 10:13:00

數(shù)據(jù)庫APIFastAPI

2012-04-12 09:23:15

達(dá)夢數(shù)據(jù)庫

2024-08-29 08:58:30

JPA編寫數(shù)據(jù)操

2009-11-13 15:54:26

ADO.NET數(shù)據(jù)庫操

2022-08-01 09:44:07

架構(gòu)MySQL數(shù)據(jù)庫

2021-01-18 14:04:49

java監(jiān)控操作

2021-07-05 09:24:06

MySQL SQL 語句數(shù)據(jù)庫

2024-09-02 09:26:28

2020-05-28 16:50:59

源碼分析 MybatisJava

2021-10-20 09:04:21

Spring Beanscope數(shù)據(jù)庫

2021-05-07 08:03:05

JS動態(tài)合并

2025-02-07 09:11:04

JSON對象策略

2021-01-31 22:54:39

Java Jsoy開發(fā)
點贊
收藏

51CTO技術(shù)棧公眾號