项目中出现了这样一个问题,当一个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字符串后,由于业务需求,会将Map转为JsonObject,添加元素后,又转成Json字符串,最后再被包装到另一个Map里,被转成Json字符串发送给APP端,这个时候APP端反应结果中带有“\”转义字符,无法解析。简化一下问题:当一个Map被转成Json字符串后,被添加到另一个Map中,如果这个新的Map需要转成Json字符串格式,那么转化...
				
今天写小程序遇到一个问题一直解决不了。 起因是使用小程序模板需要发送json数据。然后我直接使用了JsonObject进行了json拼接。 最后toString 换成json字符串发送数据。虽然最后发送成功了但是微信消息模板显示的数据不对。 data部分的数据都没有显示出来。 最后找到原因是因为toString 后内容增加了转义符导致的。 最后解决办法是先用hashmap储存然后直接换成jso...
在JS中快速JSON字符串。 手动义小的JSON字符串比使用本机更快。 主要焦点是非常快速地检查不需要义的字符串,同时还改善了义自身或至少不低于JSON.stringify的条件。 运行基准测试( npm run benchmark )显示出以下好处: 节点./基准 JSON short non escaped x 2 , 884 , 878 ops/sec ± 2.25 % ( 95 runs sampled) this short non escaped x 13 , 082 , 026 ops/sec ± 1.47 % ( 93 runs sampled) JSON short full escape 1 x 2 , 768 , 607 ops/sec ± 1.85 % ( 86 runs sampled) this short full es import org.apache.commons.lang.StringEscapeUtils; public static void main(String[] args) { CustomerDataDto custo...
我是小玉,一个平平无奇的小天才! python中对于字符串的表示和其他语言基本一样,都是用string来表示字符串,不同的是,python在使用字符串的时候同样不需要定义。 字符串的表示: 先举一个例子: str = "hello world!" 这就是一句python的字符串表达式。 需要注意的是,在使用字符串的时候,我们需要将字符串用引号引起来,单引号和双引号均可。 注: 1、这里的引号不能混合使用 str = "hello world!' 2、相同类型的引号不可嵌套使用。 str = "hello "this" world!" 3、引号不可以换行使用。 // 参数集合 Map<String,String> headerMap = new HashMap<String, String>(); headerMap.put("key1","key1"); headerMap.put("key2","key2"); // 此时如果直接用下面的方法就会出现"\ JSONValue.toJSONString(headerMap); 更正后的写法: // 参数集合 JSONObject jsonObject = new JSO
问题关于json 字符串中带有反斜杠的问题 一、 原因 前端在使用了两次stringify({}) 才会出现反斜杠,由于后端要求要传入一个对象和两个字符串,都要是json类型,对象是动态创建的。 二、使用步骤 1.代码示例 代码如下(示例): let goodsMap = new Map() for (var i = 0; i < that.myChartList.length; i++ @Slf4j public class LiJingDeliverApi { public RetStatus<Object> deliver(CustomerPlaformShopVO customerPlaformVO, OrderBondedInfoVO orderBondedInfoVO) { RetStatus<Object> retStatus = new RetStatus&lt
一种alibaba falstjson: 1.MapJSON Map<String, Object> map = new HashMap<String, Object>(); map.put("a", "a"); map.put("b", "123"); JSONObject json = new JSONObject(map); 2.mapstring Map<String, Object> map =
最近发现了一个问题,通过查看用户的活跃度发现了奇怪的事情,有的用户访问某一个接口没有问题,而一些奇葩用户访问这一接口就是不成功,经过查看,原来是Android系统4.4以下mapjson的时候出现了问题,具体是什么了,下面我们来分析分析。 第一,利用”org.json.JSONObject”下的JsonObject 时,4.4以下的系统出现“=”的问题。比如: Map<String,
Map<String, String> map = new HashMap<String, String>(); map.put("1","1"); map.put("2","2"); 使用JSONObject就可以将map直接json package test; import java.io.File; import java.util.HashMap; import java.util.Map; import org.. ```javascript const jsonString = '{"name":"John Doe","age":30,"city":"New York\\"s"}'; const unescapedJsonString = jsonString.replace(/\\"/g, "'"); console.log(unescapedJsonString); // 输出:{"name":"John Doe","age":30,"city":"New York's"} 这里使用了正则表达式 `/\\"/g`,表示匹配所有的 `\"` 转义字符,并使用单引号字符 `'` 替换它们。