关于FastJson输出的json中的多余的反斜杠问题

今天通过FastJson输出时,发现输出的内容中多了很多的反斜杠,导致前端的JS不能通过json来进行条件判断,从而影响了进程的正常运行。

运行环境:SpringBoot(1.5.21.RELEASE)+FastJson(1.2.47)

本来输出不应该有反斜杠的。

正确的输出应该是:

对比之后,发现就是在每个双引号的前面加了反斜杠表示转义。


Google和百度之后,大家的答案基本是可以三位三种:

  1. 通过String.ReplaceAll把"\"去掉;
    (Java 反斜杠如何转义的问题,根据下图,可以看出,在后端代码中进行Replace是毫无意义的,因为生成的信息中原本没有反斜杠转义,反斜杠是FastJson的消息转换器添加上去的。 所以就需要在前端页面中JS判断Json输出的status是0还是1之前,先将得到的Json信息Replace一下。但是如果需要判断的特别多的话,很麻烦。而且我用juqey的post方法,得到结果result并不是简单的String,对result进行Replace并不可行。。。orz)(对我并不适用。)

  1. 直接返回对象,而不是返回String;
    (fastjson如何去掉多余的反斜杠,这里我测试了一下我自己的,还是不行。。。)

  1. fastjson的SerializerFeature可以设置不进行字符转义
    (fastjson SerializerFeature含义,这个可以设置DeDisableCheckSpecialChar 一个对象的字符串属性中如果有特殊字符如双引号,将会在转成json时带有反斜杠转移符。如果不需要转义,可以使用这个属性。默认为false。 我的FastJson版本为1.2.47,显示已经不推荐使用了。我依然试了试,还是不行。。。。。。 )

以上是我通过Google和百度的结果,仍没有解决我的问题。

因为现在我在做的功能是仿的一个SpringBoot项目,所以,仍没有结果的情况下,我去一一对照了我的代码和他的代码,我发现原本的项目中,只找到了pom添加了fastjson的依赖,并没有在SpringBoot的主程序对消息转换器即HttpMessageConverters进行注入配置。 这也就是说,原项目中使用的是SpringBoot原本默认的消息转换器配置,为了解决我的问题,我把fastjson的配置注释了。。

是的,好了。


回到最开始出问题的地方,也解决了。

如果你也遇到了同样的问题,欢迎留言,我们一起讨论。

虽然解决了目前的问题,但是还是不太明白。

下一步,抽出时间,了解SpringBoot的默认消息转换机制,对比和之前FastJson的配置。

转载于:https://juejin.im/post/5cf27f91e51d45773d4685b7

你可能感兴趣的:(关于FastJson输出的json中的多余的反斜杠问题)