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

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

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

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

簡化一下問題

當(dāng)一個(gè)Map被轉(zhuǎn)成Json字符串后,被添加到另一個(gè)Map中,如果這個(gè)新的Map需要轉(zhuǎn)成Json字符串格式,那么轉(zhuǎn)化后,內(nèi)部的這個(gè)Map轉(zhuǎn)成的Json字符串,都會(huì)被加上“\”轉(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字符串會(huì)不會(huì)有問題:

    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字符串的方式解決這個(gè)問題的:

    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);

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

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

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

相關(guān)文章

  • java中實(shí)體類和JSON對象之間相互轉(zhuǎn)化

    java中實(shí)體類和JSON對象之間相互轉(zhuǎn)化

    Java中關(guān)于Json格式轉(zhuǎn)化Object,Map,Collection類型和String類型之間的轉(zhuǎn)化在我們實(shí)際項(xiàng)目中應(yīng)用的很是普遍和廣泛。最近工作的過程中也是經(jīng)常有,因此,自己封裝了一個(gè)類分享給大家。
    2015-05-05
  • 解決IDEA中同項(xiàng)目引用報(bào)紅問題

    解決IDEA中同項(xiàng)目引用報(bào)紅問題

    在IDEA中,如果項(xiàng)目引用報(bào)紅,可能是因?yàn)镮DEA的引用緩存問題,可以通過File->Invalidate Caches/Restart清空緩存并重建索引來解決,這個(gè)方法可以幫助解決同項(xiàng)目中引用找不到的問題,恢復(fù)正常的項(xiàng)目引用,消除報(bào)紅
    2024-09-09
  • Java判斷數(shù)字位數(shù)的方法總結(jié)

    Java判斷數(shù)字位數(shù)的方法總結(jié)

    本文給大家整理了Java判斷數(shù)字位數(shù)的兩種常用方法,對此有興趣的可以跟著小編一起學(xué)習(xí)下。
    2018-02-02
  • Java字符串拼接詳解

    Java字符串拼接詳解

    大家好,本篇文章主要講的是Java字符串拼接詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-02-02
  • Java微信公眾平臺(tái)之素材管理

    Java微信公眾平臺(tái)之素材管理

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)之素材管理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 基于spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯

    基于spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯

    這篇文章主要介紹了spring?@Cacheable?注解的spel表達(dá)式解析執(zhí)行邏輯,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java設(shè)計(jì)模式中的策略(Strategy)模式解讀

    Java設(shè)計(jì)模式中的策略(Strategy)模式解讀

    這篇文章主要介紹了Java設(shè)計(jì)模式中的策略(Strategy)模式解讀,對象的某個(gè)行為,在不同場景有不同實(shí)現(xiàn)方式,可以將這些行為的具體實(shí)現(xiàn)定義為一組策略,每個(gè)實(shí)現(xiàn)類實(shí)現(xiàn)一種策略,在不同場景使用不同的實(shí)現(xiàn),并且可以自由切換策略,需要的朋友可以參考下
    2023-10-10
  • 加速spring/springboot應(yīng)用啟動(dòng)速度詳解

    加速spring/springboot應(yīng)用啟動(dòng)速度詳解

    這篇文章主要介紹了加速spring/springboot應(yīng)用啟動(dòng)速度詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì)對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07
  • Java三種IO模型原理實(shí)例詳解

    Java三種IO模型原理實(shí)例詳解

    這篇文章主要介紹了Java三種IO模型原理實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • Elasticsearch中FST與前綴搜索應(yīng)用實(shí)戰(zhàn)解析

    Elasticsearch中FST與前綴搜索應(yīng)用實(shí)戰(zhàn)解析

    這篇文章主要為大家介紹了Elasticsearch中FST與前綴搜索應(yīng)用實(shí)戰(zhàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08

最新評論