fastjson com.alibaba.fastjson.JSONException: unclosed string : 十
使用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\":\"李\\\\\\\\\\\\学\\十大aaa@qq.com#$%^&*()))_+{}:?><{}][|||||{{{}}}}[][][][[[]]]:::;;;''''''\\~`表代表///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中的反斜杠给干掉。