最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用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)文章

  • Java經(jīng)典算法匯總之冒泡排序

    Java經(jīng)典算法匯總之冒泡排序

    冒泡排序基本思想:在要排序的一組數(shù)中,對當前還未排好序的范圍內(nèi)的全部數(shù),自上而下對相鄰的兩個數(shù)依次進行比較和調(diào)整,讓較大的數(shù)往下沉,較小的往上冒。即:每當兩相鄰的數(shù)比較后發(fā)現(xiàn)它們的排序與排序要求相反時,就將它們互換。
    2016-04-04
  • zookeeper概述圖文詳解

    zookeeper概述圖文詳解

    今天小編就為大家分享一篇關(guān)于Zookeeper概述圖文詳解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • mybatis-plus實現(xiàn)四種lambda表達式方式

    mybatis-plus實現(xiàn)四種lambda表達式方式

    使用了lambda表達式 可以通過方法引用的方式來使用實體字段名的操作,本文主要介紹了mybatis-plus實現(xiàn)四種lambda表達式方式,具有一定的參考價值,感興趣的可以了解一下
    2024-06-06
  • SpringMVC表單標簽使用詳解

    SpringMVC表單標簽使用詳解

    這篇文章主要為大家詳細介紹了SpringMVC表單標簽的使用方法,教大家如何用Spring封裝的一系列表單標簽
    2017-03-03
  • SpringBoot事務(wù)失效問題原因、場景與解決方案

    SpringBoot事務(wù)失效問題原因、場景與解決方案

    在SpringBoot開發(fā)中,事務(wù)管理是保證數(shù)據(jù)一致性和完整性的核心機制,然而,許多開發(fā)者在使用@Transactional注解時,可能會遇到事務(wù)失效的問題,導(dǎo)致數(shù)據(jù)異?;驑I(yè)務(wù)邏輯錯誤,本文將深入分析SpringBoot中事務(wù)失效的常見原因,并結(jié)合實際場景給出解決方案
    2025-07-07
  • 詳解多云架構(gòu)下的JAVA微服務(wù)技術(shù)解析

    詳解多云架構(gòu)下的JAVA微服務(wù)技術(shù)解析

    本文介紹了基于開源自建和適配云廠商開發(fā)框架兩種構(gòu)建多云架構(gòu)的思路,以及這些思路的優(yōu)缺點
    2021-05-05
  • springboot常見登錄(注冊)幾種實現(xiàn)過程

    springboot常見登錄(注冊)幾種實現(xiàn)過程

    這篇文章主要介紹了如何實現(xiàn)用戶注冊、登錄和微信掃碼登錄功能,注冊功能通過手機號和短信驗證碼完成,登錄功能通過賬號密碼和微信掃碼兩種方式實現(xiàn),并使用JWT進行單點登錄
    2026-02-02
  • java設(shè)計模式學(xué)習(xí)之裝飾模式

    java設(shè)計模式學(xué)習(xí)之裝飾模式

    這篇文章主要為大家詳細介紹了java設(shè)計模式學(xué)習(xí)之裝飾模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Spring Boot集成Thymeleaf的方法

    Spring Boot集成Thymeleaf的方法

    這篇文章主要介紹了Spring Boot集成Thymeleaf的方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-10-10
  • SpringBoot利用Undertow實現(xiàn)高可用的反向代理配置

    SpringBoot利用Undertow實現(xiàn)高可用的反向代理配置

    Undertow是一個采用Java開發(fā)的靈活的高性能Web服務(wù)器,本文將介紹如何利用?Undertow?服務(wù)器的反向代理能力,實現(xiàn)高可用的反向代理配置,感興趣的可以了解下
    2025-06-06

最新評論

教育| 锦屏县| 元朗区| 西华县| 安乡县| 石阡县| 类乌齐县| 南宫市| 霍城县| 犍为县| 孝昌县| 密云县| 沁源县| 南投县| 常德市| 长治县| 青铜峡市| 轮台县| 恩施市| 永定县| 讷河市| 宜兰县| 北流市| 武邑县| 广宁县| 崇明县| 揭西县| 靖宇县| 虞城县| 哈密市| 陈巴尔虎旗| 台南县| 招远市| 岳阳市| 左贡县| 慈溪市| 宜宾市| 吴旗县| 武邑县| 鹰潭市| 东安县|