json转换报错:com.alibaba.fastjson.JSONException: can not cast to JSONObject.

    xiaoxiao2022-07-05  206

    一、例子

    字符串为:"{\"a\":\"1\"}" //字符串为:"{\"a\":\"1\"}" String loginResInfo ="\"{\\\"a\\\":\\\"1\\\"}\""; System.out.println("原始字符串:" + loginResInfo); JSONObject jsonObject = JSONObject.parseObject(loginResInfo); String grAcntNo = jsonObject.getString("a"); System.out.println(grAcntNo);

    报错:

    原始字符串:"{\"a\":\"1\"}" Exception in thread "main" com.alibaba.fastjson.JSONException: can not cast to JSONObject. at com.alibaba.fastjson.JSON.parseObject(JSON.java:235) at TestReplaceAll.main(TestReplaceAll.java:22) Caused by: java.lang.ClassCastException: java.lang.String cannot be cast to com.alibaba.fastjson.JSONObject at com.alibaba.fastjson.JSON.parseObject(JSON.java:233) ... 1 more

    尝试1:去掉字符串内的斜杠

    //字符串为:"{\"a\":\"1\"}" String loginResInfo ="\"{\\\"a\\\":\\\"1\\\"}\""; System.out.println("原始字符串:" + loginResInfo); String replaceAll = loginResInfo.replaceAll("\\\\", ""); System.out.println("replaceAll:"+replaceAll); // // String substring = replaceAll.substring(1, replaceAll.length() - 1); // System.out.println("substring:"+substring); JSONObject jsonObject = JSONObject.parseObject(replaceAll); String grAcntNo = jsonObject.getString("a"); System.out.println(grAcntNo);

    报错:

    原始字符串:"{\"a\":\"1\"}" replaceAll:"{"a":"1"}" Exception in thread "main" com.alibaba.fastjson.JSONException: not close json text, token : error at com.alibaba.fastjson.parser.DefaultJSONParser.close(DefaultJSONParser.java:1520) at com.alibaba.fastjson.JSON.parse(JSON.java:160) at com.alibaba.fastjson.JSON.parse(JSON.java:166) at com.alibaba.fastjson.JSON.parse(JSON.java:135) at com.alibaba.fastjson.JSON.parseObject(JSON.java:227) at TestReplaceAll.main(TestReplaceAll.java:22)

    尝试2:只去掉{}两边的双引号

    //字符串为:"{\"a\":\"1\"}" String loginResInfo ="\"{\\\"a\\\":\\\"1\\\"}\""; System.out.println("原始字符串:" + loginResInfo); // String replaceAll = loginResInfo.replaceAll("\\\\", ""); // System.out.println("replaceAll:"+replaceAll); // String substring = loginResInfo.substring(1, loginResInfo.length() - 1); System.out.println("substring:"+substring); JSONObject jsonObject = JSONObject.parseObject(substring); String grAcntNo = jsonObject.getString("a"); System.out.println(grAcntNo);

    报错:

    原始字符串:"{\"a\":\"1\"}" substring:{\"a\":\"1\"} Exception in thread "main" com.alibaba.fastjson.JSONException: illegal identifier : \pos 1, line 1, column 2{\"a\":\"1\"} at com.alibaba.fastjson.parser.JSONLexerBase.scanSymbolUnQuoted(JSONLexerBase.java:830) at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:286) at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1394) at com.alibaba.fastjson.parser.DefaultJSONParser.parse(DefaultJSONParser.java:1360) at com.alibaba.fastjson.JSON.parse(JSON.java:156) at com.alibaba.fastjson.JSON.parse(JSON.java:166) at com.alibaba.fastjson.JSON.parse(JSON.java:135) at com.alibaba.fastjson.JSON.parseObject(JSON.java:227) at TestReplaceAll.main(TestReplaceAll.java:22)

     

    问题:

    (1)字符串内有斜杠;

    (2){}两边多了“”双引号导致

    解决:

    public static void main(String[] args) { //字符串为:"{\"a\":\"1\"}" String loginResInfo ="\"{\\\"a\\\":\\\"1\\\"}\""; System.out.println("原始字符串:" + loginResInfo); String replaceAll = loginResInfo.replaceAll("\\\\", ""); System.out.println("replaceAll:"+replaceAll); String substring = replaceAll.substring(1, replaceAll.length() - 1); System.out.println("substring:"+substring); JSONObject jsonObject = JSONObject.parseObject(substring); String grAcntNo = jsonObject.getString("a"); System.out.println(grAcntNo); }

    结果:

    原始字符串:"{\"a\":\"1\"}" replaceAll:"{"a":"1"}" substring:{"a":"1"} 1

     

    最新回复(0)