使用fastjson在转换的时候,

com.alibaba.fastjson.JSONException: unclosed string : 十
    at com.alibaba.fastjson.parser.JSONLexerBase.scanString(JSONLexerBase.java:1001)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:485)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1407)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1373)
    at com.alibaba.fastjson.JSON.parse(JSON.java:182)
    at com.alibaba.fastjson.JSON.parse(JSON.java:192)
    at com.alibaba.fastjson.JSON.parse(JSON.java:148)

    /** 
     * 因为key之前多了个 \ 导致解码失败了。 
     * 不管多少个反斜杠,简单粗暴的给他全替换了得了 
     * StringEscapeUtils.unescapeJavaScript(json); 
     * 这个不太好使。 
     */ 
    @Test 
    public void unclosedString2() { 
        String json = "{\"s.os\":\"李\\\\\\\\\\\\学\\十大!@#$%^&*()))_+{}:?><{}][|||||{
  
   {
  
   {}}}}[][][][[[]]]:::;;;''''''\\~`表代表///23456...#\",\"ssass\":\"\",\"lxk\":123467987654345}"; 
        System.out.println(json); 
        //Map 类可以, hash map 不 OK。 
        Map map = JsonUtils.parseJsonToObj(json, Map.class); 
        System.out.println(map); 
    } 
 
    public static <T> T parseJsonToObj(String json, Class<T> c) { 
        try { 
            JSONObject jsonObject = JSON.parseObject(json); 
            return JSON.toJavaObject(jsonObject, c); 
        } catch (Exception e) { 
            try { 
                //String s = StringEscapeUtils.unescapeJavaScript(json); 
                String s = json.replace("\\", ""); 
                JSONObject jsonObject = JSON.parseObject(s); 
                return JSON.toJavaObject(jsonObject, c); 
            } catch (Exception ee) { 
                System.out.println(ee.getMessage()); 
            } 
        } 
        return null; 
    }

说是升级jar包版本能解决,但是好像不行,我试过  '1.2.73'这个了还是不行,最后还又说使用 StringEscapeUtils.unescapeJavaScript(json) 这个来,其实就是把反斜杠给替换掉了,这个apach的common lang包里面的,要是有这个依赖的话,直接可以使用,要没的话,就简单的字符串替换解决吧,最好是能吧json中的反斜杠给干掉。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!