临时解决一下,因为写的是一个抽象且共通的方法不仅不确定表名,且取出来的类型是map类型,map里面可以有多个数组也可以有单个数组,不定内容。如果字段里面存的是数组str取出来的内容不仅带引号,也带反斜杠。
public class Test {
public static void main(String[] args) {
String str = "{\"a\":\"[{\"b\":1}]\"}";
System.out.println(str);
String json = StringEscapeUtils.unescapeJavaScript(str).replaceAll("\"\\[","[").replaceAll("]\"","]");//消除反斜杠,多余的引号等
System.out.println(json);
}
}
最后还是没有像上面这样写,因为测试推送1000多万数据中有些字段里面有垃圾数据 ]",这样就没有办法replaceAll了
解决方案是:这个想做成配置的,需要知道哪个字段存的是list内容,拿到这个字段转为list,其他的还是按字符串处理。
ObjectMapper mapper = new ObjectMapper();
List<xxxx> list = mapper.readValue(str, new TypeReference<List<Object>>() {}));//转为list
这样就没有特殊字符了。