转载至:https://blog.csdn.net/BD_fuhong/article/details/90447912
一、例子
字符串为:"{\"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