欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

利用Jackson實現(xiàn)JSON數(shù)據(jù)的合并

 更新時間:2025年03月25日 09:32:01   作者:pan_junbiao  
Jackson的功能豐富,安全可靠并且具有比較好的兼容性,這讓程序開發(fā)人員可以很方便地實現(xiàn)JSON 數(shù)據(jù)的相互轉(zhuǎn)換,下面小編就來和大家介紹一下如何利用Jackson實現(xiàn)JSON數(shù)據(jù)的合并吧

Jackson 庫實現(xiàn) JSON 數(shù)據(jù)的合并,可以采用基于樹模型的深度合并(遞歸策略),可以保留兩個 JSON 的所有層級數(shù)據(jù),避免覆蓋沖突。在實際開發(fā)中,Jackson 功能豐富、安全可靠并且具有比較好的兼容性,這讓程序開發(fā)人員可以很方便地實現(xiàn) JavaBean 和以 “鍵 : 值” 結(jié)構(gòu)保存的 JSON 數(shù)據(jù)的相互轉(zhuǎn)換。

1、創(chuàng)建 Jackson 工具類

創(chuàng)建 JacksonUtil 類(Jackson工具類),實現(xiàn)JSON數(shù)據(jù)的合并方法。

package com.pjb.utils;
 
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
 
/**
 * Jackson工具類
 * @author pan_junbiao
 **/
public class JacksonUtil
{
    private static ObjectMapper mapper = new ObjectMapper();
 
    /**
     * 合并 JSON 數(shù)據(jù)
     * @return 合并后的 JsonNode 對象
     */
    public static JsonNode mergeJsonNode(JsonNode mainNode, JsonNode updateNode)
    {
        //參數(shù)校驗
        if (mainNode == null && updateNode == null)
        {
            return null;
        }
 
        if (mainNode == null)
        {
            return updateNode;
        }
 
        if (updateNode == null)
        {
            return mainNode;
        }
 
        if (mainNode.isObject() && updateNode.isObject())
        {
            ObjectNode mergedNode = (ObjectNode) mainNode;
            updateNode.fields().forEachRemaining(entry -> {
                String key = entry.getKey();
                JsonNode value = entry.getValue();
                if (mergedNode.has(key))
                {
                    mergedNode.set(key, mergeJsonNode(mergedNode.get(key), value));
                } else
                {
                    mergedNode.set(key, value);
                }
            });
            return mergedNode;
        } else
        {
            // 非對象類型直接覆蓋(如數(shù)組、基本類型)
            return updateNode;
        }
    }
 
    /**
     * 合并 JSON 數(shù)據(jù)
     * @return 合并后的 JSON 字符串
     */
    public static String mergeJsonString(String mainJson, String updateJson)
    {
        //參數(shù)校驗
        if ((mainJson == null || mainJson.length() == 0) && (updateJson == null || updateJson.length() == 0))
        {
            return null;
        }
 
        if (mainJson == null || mainJson.length() == 0)
        {
            return updateJson;
        }
 
        if (updateJson == null || updateJson.length() == 0)
        {
            return mainJson;
        }
 
        try
        {
            //合并 JSON 數(shù)據(jù)
            JsonNode mainNode = mapper.readTree(mainJson);
            JsonNode updateNode = mapper.readTree(updateJson);
            JsonNode resultNode = mergeJsonNode(mainNode, updateNode);
            return mapper.writeValueAsString(resultNode);
        } catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }
}

2、測試 JSON 數(shù)據(jù)的合并

創(chuàng)建測試方法,測試 JSON 數(shù)據(jù)的合并結(jié)果。

/**
 * 合并 JSON 數(shù)據(jù)
 */
@Test
public void mergeJsonTest()
{
    try
    {
        String mainNode = "{\n" +
                "  \"userId\": 1,\n" +
                "  \"userName\": \"pan_junbiao的博客\"\n" +
                "}";
 
        String updateNode = "{\n" +
                "  \"userName\": \"pan_junbiao的博客_001\",\n" +
                "  \"blogName\": \"您好,歡迎訪問 pan_junbiao的博客\",\n" +
                "  \"blogUrl\": \"https://blog.csdn.net/pan_junbiao\",\n" +
                "  \"hobbies\": [\"游泳\", \"籃球\", \"足球\"]\n" +
                "}";
 
        //合并 JSON 數(shù)據(jù)
        String result = JacksonUtil.mergeJsonString(mainNode, updateNode);
 
        //打印結(jié)果
        System.out.println(result);
    } catch (Exception ex)
    {
        ex.printStackTrace();
    }
}

執(zhí)行結(jié)果:

{
  "userId": 1,
  "userName": "pan_junbiao的博客_001",
  "blogName": "您好,歡迎訪問 pan_junbiao的博客",
  "blogUrl": "https://blog.csdn.net/pan_junbiao",
  "hobbies": ["游泳", "籃球", "足球"]
}

到此這篇關(guān)于利用Jackson實現(xiàn)JSON數(shù)據(jù)的合并的文章就介紹到這了,更多相關(guān)Jackson JSON數(shù)據(jù)合并內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入淺析hbase的優(yōu)點

    深入淺析hbase的優(yōu)點

    本文講述了HBase的特征和它的優(yōu)點,并簡要回顧了行鍵設(shè)計的重點之處,它還向你展示了如何在本地配置HBase環(huán)境,使用命令創(chuàng)建表、插入數(shù)據(jù)、檢索指定行以及最后如何進(jìn)行scan操作,感興趣的朋友一起看看吧
    2017-09-09
  • Spring使用xml方式整合第三方框架流程詳解

    Spring使用xml方式整合第三方框架流程詳解

    這篇文章主要介紹了Spring使用xml方式整合第三方框架流程,Spring會在應(yīng)用上下文中為某個bean尋找其依賴的bean,Spring中bean有三種裝配機(jī)制,分別是:在xml中顯式配置、在java中顯式配置、隱式的bean發(fā)現(xiàn)機(jī)制和自動裝配
    2023-02-02
  • Spring?Boot:Idea從零開始初始化后臺項目的教程

    Spring?Boot:Idea從零開始初始化后臺項目的教程

    這篇文章主要介紹了Spring?Boot:Idea從零開始初始化后臺項目的教程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中避免空指針的幾種方法解析

    Java中避免空指針的幾種方法解析

    這篇文章主要介紹了Java中避免空指針的幾種方法解析,Java 中任何對象都有可能為空,當(dāng)我們調(diào)用空對象的方法時就會拋出 NullPointerException 空指針異常,這是一種非常常見的錯誤類型,需要的朋友可以參考下
    2023-12-12
  • Sentinel核心類之Entry類解讀

    Sentinel核心類之Entry類解讀

    這篇文章主要介紹了Sentinel核心類之Entry類解讀,Sentinel中Entry可以理解為每次進(jìn)入資源的一個憑證,如果調(diào)用SphO.entry()或者SphU.entry()能獲取Entry對象,代表獲取了憑證,沒有被限流,否則拋出一個BlockException,需要的朋友可以參考下
    2023-12-12
  • 一文搞懂Spring中@Autowired和@Resource的區(qū)別

    一文搞懂Spring中@Autowired和@Resource的區(qū)別

    @Autowired?和?@Resource?都是?Spring/Spring?Boot?項目中,用來進(jìn)行依賴注入的注解。它們都提供了將依賴對象注入到當(dāng)前對象的功能,但二者卻有眾多不同,并且這也是常見的面試題之一,所以我們今天就來盤它
    2022-08-08
  • Java學(xué)習(xí)筆記:關(guān)于Java?double類型相加問題

    Java學(xué)習(xí)筆記:關(guān)于Java?double類型相加問題

    這篇文章主要介紹了關(guān)于Java?double類型相加問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java利用反射動態(tài)設(shè)置對象字段值的實現(xiàn)

    Java利用反射動態(tài)設(shè)置對象字段值的實現(xiàn)

    橋梁信息維護(hù)需要做到字段級別的權(quán)限控制,本文主要介紹了Java利用反射動態(tài)設(shè)置對象字段值的實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • SpringSecurity授權(quán)機(jī)制的實現(xiàn)(AccessDecisionManager與投票決策)

    SpringSecurity授權(quán)機(jī)制的實現(xiàn)(AccessDecisionManager與投票決策)

    本文主要介紹了SpringSecurity授權(quán)機(jī)制的實現(xiàn),其核心是AccessDecisionManager和投票系統(tǒng),下面就來介紹一下,感興趣的可以了解一下
    2025-04-04
  • Jackson處理Optional時遇到問題的解決與分析

    Jackson處理Optional時遇到問題的解決與分析

    Optional是Java實現(xiàn)函數(shù)式編程的強(qiáng)勁一步,并且?guī)椭诜妒街袑崿F(xiàn),但是Optional的意義顯然不止于此,下面這篇文章主要給大家介紹了關(guān)于Jackson處理Optional時遇到問題的解決與分析的相關(guān)資料,需要的朋友可以參考下
    2022-02-02

最新評論