Java在Map轉Json字符串時出現(xiàn)"\"轉義字符的解決辦法
項目中出現(xiàn)了這樣一個問題,當一個Map被轉成Json字符串后,由于業(yè)務需求,會將Map轉為JsonObject,添加元素后,又轉成Json字符串,最后再被包裝到另一個Map里,被轉成Json字符串發(fā)送給APP端,這個時候APP端反應結果中帶有“\”轉義字符,無法解析。
簡化一下問題
當一個Map被轉成Json字符串后,被添加到另一個Map中,如果這個新的Map需要轉成Json字符串格式,那么轉化后,內部的這個Map轉成的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");
param.put("pushJson", JSON.toJSONString(pushMap));
String pushJson = JSON.toJSONString(param);
System.out.println(pushJson);
}格式化一下結果:
{
"pushJson":
"{\"testKey01\":\"value01\",\"testKey02\":\"value02\"}",
"userId":66666,
"username":"XXXX"
}
延伸測試一下,如果用JSONObject轉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);
}格式化一下結果:
{
"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);
}結果:
{"pushJson":{"testKey01":"value01","testKey02":"value02"},"userId":66666,"username":"XXXX"}
{"pushJson":{"testKey01":"value01","testKey02":"value02"},"userId":66666,"username":"XXXX"}
這樣就不帶轉義字符了
而項目中,我是采用將JSON字符串轉回Map,然后添加到新的Map中,再轉成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);當然上面帶“\”轉義字符的結果也是有辦法解析的:
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);
}結果:
{"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);反解析的時候,還是可以正常解析出來,不需要轉成jsonObject也可以
{"pushJson":"{\"testKey01\":\"value01\",\"testKey02\":\"value02\"}","userId":66666,"username":"XXXX"}
{"testKey01":"value01","testKey02":"value02"}
到此這篇關于Java在Map轉Json字符串時出現(xiàn)"\"轉義字符的解決辦法的文章就介紹到這了,更多相關Java Map轉Json內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
深入淺析springboot中static和templates區(qū)別
這篇文章主要介紹了springboot中static和templates區(qū)別,本文通過圖文實例代碼相結合給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2020-02-02
Java實現(xiàn)整合文件上傳到FastDFS的方法詳細
FastDFS是一個開源的輕量級分布式文件系統(tǒng),對文件進行管理,功能包括:文件存儲、文件同步、文件上傳、文件下載等,解決了大容量存儲和負載均衡的問題。本文將提供Java將文件上傳至FastDFS的示例代碼,需要的參考一下2022-02-02
mybatis-plus集成springboot實現(xiàn)XML映射器方式
本文詳細介紹了MyBatis-Plus中SQL映射配置的使用方法,包括動態(tài)SQL的支持和常見SQL操作的實現(xiàn),通過XML映射器,可以靈活地定義復雜的查詢語句,并處理動態(tài)條件和批量操作,文中還提供了具體的配置步驟和示例代碼,幫助開發(fā)者更好地理解和應用這些功能2026-03-03
Java語言實現(xiàn)數(shù)據(jù)結構棧代碼詳解
這篇文章主要介紹了Java語言實現(xiàn)數(shù)據(jù)結構棧代碼詳解,簡單介紹了棧的概念,然后分享了線性棧和鏈式棧的Java代碼,具有一定參考價值,需要的朋友可以了解下。2017-11-11
SpringBoot整合Spring Security實現(xiàn)基礎認證與授權
在后端開發(fā)領域,認證(Authentication)?和授權(Authorization)?是系統(tǒng)安全的核心基石,Spring Security 作為 Spring 生態(tài)官方推薦的安全框架,是Java 后端安全開發(fā)的首選方案,本文給大家介紹了SpringBoot整合Spring Security實現(xiàn)基礎認證與授權2026-04-04

