<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 2147字,需瀏覽 5分鐘

           ·

          2020-11-07 04:20

          1. 前言

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

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

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

          {
          ????"username":"felord.cn",
          ????"age":18
          }

          期望增加一個(gè)性別字段gender:

          {
          ????"username":?"felord.cn",
          ????"age":?18,
          ????"gender":?"male"
          }

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

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

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

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

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

          String?json?=?"{\n"?+
          ????????"????\"username\":\"felord.cn\",\n"?+
          ????????"????\"age\":18\n"?+
          ????????"}";

          ObjectMapper?objectMapper?=?new?ObjectMapper();

          ObjectNode?jsonNodes?=?objectMapper.readValue(json,?ObjectNode.class);
          jsonNodes.put("gender",?"male");
          String?newJson?=?objectMapper.writeValueAsString(jsonNodes);
          //?newJson?=?{"username":"felord.cn","age":18,"gender":"male"}

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

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

          /**
          ?*?@author?felord.cn
          ?*?@since?11:02
          ?*/

          @Data
          public?class?User?{
          ????private?String?username;
          ????private?Integer?age;
          }

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

          User?user?=?new?User();
          user.setUsername("felord.cn");
          user.setAge(18);

          ObjectMapper?objectMapper?=?new?ObjectMapper();
          ObjectNode?jsonNodes?=?objectMapper.valueToTree(user);
          jsonNodes.put("gender",?"male");
          String?newJson?=?objectMapper.writeValueAsString(jsonNodes);
          //?newJson?=?{"username":"felord.cn","age":18,"gender":"male"}

          4. 移除屬性

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

          5. 擴(kuò)展

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

          JsonNode

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

          6. 總結(jié)

          本文對 Jackson 動(dòng)態(tài)的增刪改查 JSON 進(jìn)行了介紹,牽引出一個(gè)很重要的操作工具JsonNode。充分利用手中已有的資源來解決問題,無需自己造輪子,也不必引入新的依賴。好了今天的分享就到這里,多多關(guān)注下方公眾號:碼農(nóng)小胖哥?及時(shí)獲取更多編程干貨。


          往期推薦

          僅用六個(gè)字符來完成Hello World,你能做到嗎?

          StackOverflow熱帖:Java整數(shù)相加溢出怎么辦?

          星巴克是如何處理訂單的?

          MIT黑科技:通過手機(jī)記錄的咳嗽數(shù)據(jù)檢測是否感染新冠病毒

          10個(gè)你可能不曾用過卻很有用的 LINUX 命令


          深度內(nèi)容

          推薦加入


          最近熱門內(nèi)容回顧? ?#技術(shù)人系列

          瀏覽 68
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩国产高清无码 | 97超碰在 | 影音先锋男人在线资源 | 国产性爱电影一区二区三区 | 五月天成人在线观看视频 |