前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >json字符串转义格式化后再转换处理demo StringEscapeUtils.unescapeJava

json字符串转义格式化后再转换处理demo StringEscapeUtils.unescapeJava

作者头像
oktokeep
发布2024-10-09 12:32:45
920
发布2024-10-09 12:32:45
举报
文章被收录于专栏:第三方工具

json字符串转义格式化后再转换处理demo StringEscapeUtils.unescapeJava

报错关键字:

illegal identifier

Expected BEGIN_OBJECT but

Expected name at

代码语言:javascript
复制
package com.example.core.mydemo;

import com.alibaba.fastjson.JSON;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import org.apache.commons.lang3.StringEscapeUtils;

import java.util.Map;

/**
 * json字符串转义格式化后再转换处理demo
 * 转义的问题。
 * 在读取到这个json字符串之后,发现该字符串中包含了\转义符号,程序自动把它变成了\\\
 * 如果遇到类似的问题,可以直接使用org.apache.commons包下的StringEscapeUtils类,先去掉转义,再反序列化,这样可以快速解决问题。
 *
 */
public class json6 {
    public static void main(String[] args) {

        String json = "{\\\"accountNonExpired\\\":true,\\\"accountNonLocked\\\":true,\\\"authorities\\\":[{\\\"authority\\\":\\\"admin\\\"}],\\\"credentialsNonExpired\\\":true,\\\"enabled\\\":true,\\\"id\\\":13,\\\"password\\\":\\\"$2a$10$o3XfeGr0SHStAwLuJRW6y.kE0UTerQfv3SXrAcVLuJ6M3hEsC9RKe\\\",\\\"roles\\\":[\\\"admin\\\"],\\\"username\\\":\\\"admin\\\"}";
        //case1 fastjson
        //        Map map = JSON.parseObject(json, Map.class);
        /**
         * 报错信息:com.alibaba.fastjson.JSONException: illegal identifier : \pos 1, line 1, column 2
         */
//        System.out.println("map="+map);

        //转换成功
//        json = StringEscapeUtils.unescapeJava(json);
//        Map map2 = JSON.parseObject(json, Map.class);
//        System.out.println("map2="+map2);

        //case2  jackson
//        ObjectMapper objectMapper = new ObjectMapper();
//        try {
//
        //加上这行,不报错。
//            json = StringEscapeUtils.unescapeJava(json);
//
//            Map map = objectMapper.readValue(json, Map.class);
//            /**
//             * 报错信息:com.fasterxml.jackson.core.JsonParseException: Unexpected character ('\' (code 92)): was expecting double-quote to start field name
//             */
//            System.out.println("map="+map);
//        } catch (JsonProcessingException e) {
//            e.printStackTrace();
//        }

        //case3 gson
        json = StringEscapeUtils.unescapeJava(json);

        Map map3 = new Gson().fromJson(json, Map.class);
        /**
         * 报错信息:com.google.gson.stream.MalformedJsonException: Expected name at line 1 column 2 path $.
         */
        System.out.println("map3="+map3);



    }

}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档