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

一、例子

字符串为:"{\"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

 

  • 18
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值