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