JSON字符串去除\r \n等特殊字符后,JSONArray.parseArray()报错
String replaceJsonStr = JSON.toJSONString(jsonStr).replaceAll("\\\\r|\\\\n", "");
List<TradeRate> tradeRates = JSONArray.parseArray(replaceJsonStr, TradeRate.class);
报错信息如下:
com.alibaba.fastjson.JSONException: unclosed.str.lit
at com.alibaba.fastjson.parser.JSONLexerBase.readString(JSONLexerBase.java:4892) ~[fastjson-1.2.70.jar:?]
at com.alibaba.fastjson.parser.JSONScanner.scanFieldString(JSONScanner.java:1012) ~[fastjson-1.2.70.jar:?]
at com.alibaba.fastjson.parser.deserializer.FastjsonASMDeserializer_7_TradeRate.deserialze(Unknown Source) ~[?:?]
at com.alibaba.fastjson.parser.deserializer.JavaBeanDeserializer.deserialze(JavaBeanDeserializer.java:284) ~[fastjson-1.2.70.jar:?]
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:775) ~[fastjson-1.2.70.jar:?]
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:709) ~[fastjson-1.2.70.jar:?]
at com.alibaba.fastjson.parser.DefaultJSONParser.parseArray(DefaultJSONParser.java:704) ~[fastjson-1.2.70.jar:?]
at com.alibaba.fastjson.JSON.parseArray(JSON.java:620) ~[fastjson-1.2.70.jar:?]
原因是jsonStr字符串中包含字符\\r,代码只过滤替换了\r,剩下了一个反斜杠\ 导致JSONArray.parseArray报错
解决方案(将反斜杠\替换为空字符串):
String replaceJsonStr = JSON.toJSONString(jsonStr).replaceAll("\\\\r|\\\\n", "").replaceAll("\\\\", "");
List<TradeRate> tradeRates = JSONArray.parseArray(replaceJsonStr, TradeRate.class);