项目中出现了这样一个问题,当一个Map被转成Json字符串后,由于业务需求,会将Map转为JsonObject,添加元素后,又转成Json字符串,最后再被包装到另一个Map里,被转成Json字符串发送给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"}

一种Map转Json字符串,出现“\”转义字符的解决办法相关推荐

  1. freetds php mssql 中文乱码,PHP读取mssql json数据中文乱码的解决办法

    PHP及网页使用UTF-8编码,数据库是sql server2008,使用默认编码(936,即GBK编码) 当读取数据库数据时,使用php自带的json_encode()返回到前端,结果中文不显示. ...

  2. C语言在读取txt类型文件中的汉字字符串出现乱码的解决办法

    题目 C语言在读取txt类型文件中的汉字字符串出现乱码的解决办法 以下是本篇文章正文内容,欢迎朋友们进行指正,一起探讨,共同进步.--来自考研路上的lwj 一.前言 当我们在练习文件这一章节时,因为需 ...

  3. java map转json字符串_Java-Gso-json字符串解析-php后台返回字段类型可能为字符串(/空字符串)或者对象的情况...

    其实本来android前端定义的对象类型是对象,如果后台没有值的情况下,理论上给null,如果是数组给[]或者null都可以的.这样Gson再解析转换的时候就不会出问题!但是最近重构发现后台如果没有字 ...

  4. 阿里巴巴json工具类,map转json字符串,map转bean类型

    1:要求是需要将map转bean类型 //使用json工具类导入阿里巴巴的json包 import com.alibaba.fastjson.JSON; //第一步先将map类型转为json字符串 S ...

  5. Spark中Map和Json字符串相互转换

    1. Map转JsonString Map转Json的String,首先在pom中添加json4s-native的依赖,一般使用如下方式就可以得到结果 import org.json4s.jackso ...

  6. java的map转json字符串

    Map<String,String> paramMap = new HashMap<>(); JSONObject object = new JSONObject(map); ...

  7. .NET Core 3.0 System.Text.Json 和 Newtonsoft.Json 行为不一致问题及解决办法

    行为不一致 .NET Core 3.0 新出了个内置的 JSON 库, 全名叫做尼古拉斯 System.Text.Json - 性能更高占用内存更少这都不是事... 对我来说, 很多或大或小的项目能少 ...

  8. oracle插入时间报错,Oracle 插入时间时 报错:ORA-01861: 文字与格式字符串不匹配 的解决办法...

    一.写sql的方式插入到Oracle中 往oracle中插入时间  '2007-12-28 10:07:24' 如果直接按照字符串方式,或者,直接使用to_date('2007-12-28 10:07 ...

  9. python-非标准格式json文件读取报错解决办法

    不是所有以.json结尾的文件,里面的数据都是标准的json格式. 如,以下名为countries.json文件中的数据格式,就是非标准化的json数据格式. 注:json标准格式中,字符串必须用双引 ...

最新文章

  1. iOS调用系统相机文字改为中文
  2. 为什么你老是讲不清楚js的继承模式
  3. TensorFlow入门(三)多层 CNNs 实现 mnist分类
  4. 一般网站基本建设离不开这三要素!
  5. R语言应用实战系列(六)-基于R的人工神经网络ANN算法和KNN算法(k-Nearest Neighbour)
  6. Systrace的用法小结
  7. java poi生.docx_java – Apache POI或docx4j处理docx文件
  8. Eclipse汉化插件
  9. Activiti的ProcessEngine的基本配置
  10. 2017-02-26,周日整理
  11. PowerShell批量配置VM端点
  12. 今日头条php笔试题,2017年今日头条笔试题目
  13. 零基础小白必须学习的,3Dmax快捷键大全!你都会吗?
  14. Java、检查 ISBN-10
  15. win10安装双系统ubuntu
  16. 5G千兆路由器工业物联网应用
  17. HTML+JS+websocket 实现联机“游戏王”对战(十三)- 实机演示视频
  18. 佳能c3020维修模式 白电平调整_佳能5d3 如何调色温
  19. 「圆桌」无人驾驶何时来?| 甲子引力
  20. 6个usb口服务器无响应,USB插口无反应怎么办?USB接口不能用解决办法

热门文章

  1. 【前端系列教程之HTML5】01_HTML概述
  2. Spring Boot自定义注解+AOP实现日志记录
  3. 扫拖地机器人预留_可扫地可拖地,米家扫拖机器人体验
  4. 视频融合平台EasyCVR视频流出现报错该如何解决?
  5. SI 设置全选快捷键
  6. 还在为IntelliJ Lombok 插件烦恼吗?来这里带你一起飞
  7. Python3.8更新笔记
  8. linux虚拟机不显示ip,不显示ens33
  9. 欧洲5000年文明史,到底是怎么来的?
  10. 如何设置关闭某些开机自启软件