解决因Spring Boot接口返回字符串格式的JSON, 双引号前面会加上反斜杠\转义, 导致前端反序列化时失败问题.

双引号全部被加了转义符\, 导致了前端反序列化失败.
[{\"img\": \"null\",\"url\": \"https://www.baidu.com",\"title\": \"标题\",\"price\": 1.5}]
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 794 path $.data.goods
W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:226)
W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:222)
W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:131)
W/System.err:     at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$

解决方式(推荐第二种):

  1. 前端解决, 把JSON双引号前面的反斜杠全部替换掉之后再反序列化。
jsonStr.replace("""\""","")
  1. 后端处理, 把String格式JSON类型改为JSONObject或者JSONArray, 因为通过String的话,还需要调用JSONObject.toString()方法进行转换。
//JSON数组
//改之前
private String goods;
//改之后
private JSONArray goods;
//把字符串格式的JSON数组解析为JSONArray
result.setGoods(JSONObject.parseArray(task.getGoods()));

//JSON
//改之前
private String goods;
//改之后
private JSONObject goods;
//把字符串格式的JSON解析为JSONObject
result.setGoods(JSONObject.parseObject(task.getGoods()));
//解决后
[{"img": "null","url": "https://www.baidu.com","title": "标题","price": 1.5}]