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

Java在Map轉(zhuǎn)Json字符串時出現(xiàn)"\"轉(zhuǎn)義字符的解決辦法

 更新時間:2023年07月21日 15:12:19   作者:一個胖子IT男  
當(dāng)一個Map被轉(zhuǎn)成Json字符串后,被添加到另一個Map中,會出現(xiàn)被加上“\”轉(zhuǎn)義字符的情況,這個時候該如何解決呢,下面就來和小編一起了解一下

項(xiàng)目中出現(xiàn)了這樣一個問題,當(dāng)一個Map被轉(zhuǎn)成Json字符串后,由于業(yè)務(wù)需求,會將Map轉(zhuǎn)為JsonObject,添加元素后,又轉(zhuǎn)成Json字符串,最后再被包裝到另一個Map里,被轉(zhuǎn)成Json字符串發(fā)送給APP端,這個時候APP端反應(yīng)結(jié)果中帶有“\”轉(zhuǎn)義字符,無法解析。

簡化一下問題

當(dāng)一個Map被轉(zhuǎn)成Json字符串后,被添加到另一個Map中,如果這個新的Map需要轉(zhuǎn)成Json字符串格式,那么轉(zhuǎn)化后,內(nèi)部的這個Map轉(zhuǎn)成的Json字符串,都會被加上“\”轉(zhuǎn)義字符。

簡單的模擬一下

    public static void main(String[] args) {
        HashMap<String, Object> param = new HashMap<>();
        param.put("userId", 66666);
        param.put("username", "XXXX");
        HashMap<String, String> pushMap = new HashMap<>();
        pushMap.put("testKey01", "value01");
        pushMap.put("testKey02", "value02");
        param.put("pushJson", JSON.toJSONString(pushMap));
        String pushJson = JSON.toJSONString(param);
        System.out.println(pushJson);
    }

格式化一下結(jié)果:

{
    "pushJson":
        "{\"testKey01\":\"value01\",\"testKey02\":\"value02\"}",
    "userId":66666,
    "username":"XXXX"
}

延伸測試一下,如果用JSONObject轉(zhuǎn)Json字符串會不會有問題:

    public static void main(String[] args) {
        HashMap<String, Object> param = new HashMap<>();
        param.put("userId", 66666);
        param.put("username", "XXXX");
//        HashMap<String, String> pushMap = new HashMap<>();
//        pushMap.put("testKey01", "value01");
//        pushMap.put("testKey02", "value02");
        JSONObject pushObject = new JSONObject();
        pushObject.put("testKey01", "value01");
        pushObject.put("testKey02", "value02");
        param.put("pushJson", pushObject.toJSONString());
        String pushJson = JSON.toJSONString(param);
        System.out.println(pushJson);
    }

格式化一下結(jié)果:

{
    "pushJson":
        "{\"testKey01\":\"value01\",\"testKey02\":\"value02\"}",
    "userId":66666,
    "username":"XXXX"
}

用原本的Map和JSONObject:

public static void main(String[] args) {
        HashMap<String, Object> param = new HashMap<>();
        param.put("userId", 66666);
        param.put("username", "XXXX");
        HashMap<String, String> pushMap = new HashMap<>();
        pushMap.put("testKey01", "value01");
        pushMap.put("testKey02", "value02");
        JSONObject pushObject = new JSONObject();
        pushObject.put("testKey01", "value01");
        pushObject.put("testKey02", "value02");
        param.put("pushJson", pushMap);
        String pushJson1 = JSON.toJSONString(param);
        System.out.println(pushJson1);
        param.put("pushJson", pushObject);
        String pushJson2 = JSON.toJSONString(param);
        System.out.println(pushJson2);
    }

結(jié)果:

{"pushJson":{"testKey01":"value01","testKey02":"value02"},"userId":66666,"username":"XXXX"}
{"pushJson":{"testKey01":"value01","testKey02":"value02"},"userId":66666,"username":"XXXX"}

這樣就不帶轉(zhuǎn)義字符了

而項(xiàng)目中,我是采用將JSON字符串轉(zhuǎn)回Map,然后添加到新的Map中,再轉(zhuǎn)成JSON字符串的方式解決這個問題的:

    HashMap<String, Object> pushApp = new HashMap<>();
    pushApp.put("userId", userList);
    pushApp.put("pushType", pushType);
    pushApp.put("pushJson", JSON.parseObject(message, HashMap.class));
    String pushJson = JSON.toJSONString(pushApp);

當(dāng)然上面帶“\”轉(zhuǎn)義字符的結(jié)果也是有辦法解析的:

    public static void main(String[] args) {
        HashMap<String, Object> param = new HashMap<>();
        param.put("userId", 66666);
        param.put("username", "XXXX");
        HashMap<String, String> pushMap = new HashMap<>();
        pushMap.put("testKey01", "value01");
        pushMap.put("testKey02", "value02");
        param.put("pushJson", JSON.toJSONString(pushMap));
        String pushJson = JSON.toJSONString(param);
        System.out.println(pushJson);
        JSONObject jsonObject = JSONObject.parseObject(pushJson);
        JSONObject jsonData = jsonObject.getJSONObject("pushJson");
        System.out.println("pushJson: " + jsonData);
        String value1 = jsonData.getString("testKey01");
        System.out.println("key: testKey01 value: " + value1);
    }

結(jié)果:

{"pushJson":"{\"testKey01\":\"value01\",\"testKey02\":\"value02\"}","userId":66666,"username":"XXXX"}
pushJson: {"testKey01":"value01","testKey02":"value02"}
key: testKey01 value: value01

2019-09-12

        HashMap jsonMap = JSON.parseObject(pushJson,HashMap.class);
        String resultJson = String.valueOf(jsonMap.get("pushJson"));
        System.out.println(resultJson);

反解析的時候,還是可以正常解析出來,不需要轉(zhuǎn)成jsonObject也可以

{"pushJson":"{\"testKey01\":\"value01\",\"testKey02\":\"value02\"}","userId":66666,"username":"XXXX"}
{"testKey01":"value01","testKey02":"value02"}

到此這篇關(guān)于Java在Map轉(zhuǎn)Json字符串時出現(xiàn)"\"轉(zhuǎn)義字符的解決辦法的文章就介紹到這了,更多相關(guān)Java Map轉(zhuǎn)Json內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 深入淺析springboot中static和templates區(qū)別

    深入淺析springboot中static和templates區(qū)別

    這篇文章主要介紹了springboot中static和templates區(qū)別,本文通過圖文實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-02-02
  • Java實(shí)現(xiàn)整合文件上傳到FastDFS的方法詳細(xì)

    Java實(shí)現(xiàn)整合文件上傳到FastDFS的方法詳細(xì)

    FastDFS是一個開源的輕量級分布式文件系統(tǒng),對文件進(jìn)行管理,功能包括:文件存儲、文件同步、文件上傳、文件下載等,解決了大容量存儲和負(fù)載均衡的問題。本文將提供Java將文件上傳至FastDFS的示例代碼,需要的參考一下
    2022-02-02
  • mybatis-plus集成springboot實(shí)現(xiàn)XML映射器方式

    mybatis-plus集成springboot實(shí)現(xiàn)XML映射器方式

    本文詳細(xì)介紹了MyBatis-Plus中SQL映射配置的使用方法,包括動態(tài)SQL的支持和常見SQL操作的實(shí)現(xiàn),通過XML映射器,可以靈活地定義復(fù)雜的查詢語句,并處理動態(tài)條件和批量操作,文中還提供了具體的配置步驟和示例代碼,幫助開發(fā)者更好地理解和應(yīng)用這些功能
    2026-03-03
  • java 可重啟線程及線程池類的設(shè)計(詳解)

    java 可重啟線程及線程池類的設(shè)計(詳解)

    下面小編就為大家?guī)硪黄猨ava 可重啟線程及線程池類的設(shè)計(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-01-01
  • Spring Cloud Gateway重試機(jī)制原理解析

    Spring Cloud Gateway重試機(jī)制原理解析

    這篇文章主要介紹了Spring Cloud Gateway重試機(jī)制原理解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • Java調(diào)用打印機(jī)的2種方式舉例(無驅(qū)/有驅(qū))

    Java調(diào)用打印機(jī)的2種方式舉例(無驅(qū)/有驅(qū))

    我們平時使用某些軟件或者在超市購物的時候都會發(fā)現(xiàn)可以使用打印機(jī)進(jìn)行打印,這篇文章主要給大家介紹了關(guān)于Java調(diào)用打印機(jī)的2種方式,分別是無驅(qū)/有驅(qū)的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • Java如何實(shí)現(xiàn)通過證書訪問Https請求

    Java如何實(shí)現(xiàn)通過證書訪問Https請求

    這篇文章主要介紹了Java如何實(shí)現(xiàn)通過證書訪問Https請求,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java實(shí)現(xiàn)圖像轉(zhuǎn)碼為字符畫的方法

    java實(shí)現(xiàn)圖像轉(zhuǎn)碼為字符畫的方法

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)圖像轉(zhuǎn)碼為字符畫的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • Java語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)棧代碼詳解

    Java語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)棧代碼詳解

    這篇文章主要介紹了Java語言實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)棧代碼詳解,簡單介紹了棧的概念,然后分享了線性棧和鏈?zhǔn)綏5腏ava代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • SpringBoot整合Spring Security實(shí)現(xiàn)基礎(chǔ)認(rèn)證與授權(quán)

    SpringBoot整合Spring Security實(shí)現(xiàn)基礎(chǔ)認(rèn)證與授權(quán)

    在后端開發(fā)領(lǐng)域,認(rèn)證(Authentication)?和授權(quán)(Authorization)?是系統(tǒng)安全的核心基石,Spring Security 作為 Spring 生態(tài)官方推薦的安全框架,是Java 后端安全開發(fā)的首選方案,本文給大家介紹了SpringBoot整合Spring Security實(shí)現(xiàn)基礎(chǔ)認(rèn)證與授權(quán)
    2026-04-04

最新評論

额济纳旗| 卓尼县| 交城县| 赣榆县| 攀枝花市| 革吉县| 陕西省| 西乌珠穆沁旗| 高清| 青龙| 浪卡子县| 临颍县| 安化县| 汾西县| 湄潭县| 上饶县| 岳普湖县| 吉隆县| 怀柔区| 山阳县| 来安县| 绥中县| 清河县| 安丘市| 肃北| 清流县| 汉寿县| 台北市| 如皋市| 高雄县| 密山市| 赣州市| 丰城市| 远安县| 万安县| 贺州市| 额敏县| 怀仁县| 榕江县| 大安市| 潞西市|