fastjson DisableCheckSpecialChar 过期用什么替代

vi4fp9gy  于 2021-11-27  发布在  Java
关注(0)|答案(14)|浏览(681)

rt

u59ebvdq

u59ebvdq1#

为什么要有这个需求?

13z8s7eq

13z8s7eq2#

因为对象的某个字段是json,输出会被转义

kninwzqo

kninwzqo3#

公司有个C/S系统,Client是用的GBK解码,现在Server重构但需要兼容老版本Client,如果不用这个属性的话英文括号之类的会被转义,而客户端会识别为普通文本导致出错。所以我想问是什么原因导致这个属性被Disable的呢?有替代方案吗?

omvjsjqw

omvjsjqw5#

我的问题不是由于DisableCheckSpecialChar导致的,而是FastJsonConfig默认构造函数中的SerializerFeature.BrowserSecure起的作用,希望对你们有启发。

b5buobof

b5buobof6#

redis 使用的fastjson 作为序列化工具,

也有这种问题,求解决

dgiusagp

dgiusagp7#

之前用的1.2.7,由于DisableCheckSpecialChar还有效,正常用的。
前几天升到1.2.47,由于DisableCheckSpecialChar失效了,可以设置SerializerFeature.DisableCheckSpecialChar,但不起作用,不应该转义的数据转义了

du7egjpx

du7egjpx8#

@wenshao
这种就需要不能再转义,否则传给对方怎么都是错的,支持一下以前这个特性吧。或者有没有其它替代方案。
我看从1.2.11版本开始就标记 SerializerFeature.DisableCheckSpecialChar。之前用的1.2.7 版本一直没问题,换成了1.2.47。这种数据序列化就有问题

1.2.7 执行结果

1.2.47 执行结果

eivgtgni

eivgtgni10#

StringEscapeUtils.unescapeEcmaScript(paramData);用这个方法吧,可以去掉反斜杠

vql8enpb

vql8enpb11#

有需求,请解决,多次加解密的过程中使用了JSON.toJsonString(),结果多了好多反斜杠,一层层递加反斜杠

{
    "code": "0000",
    "desc": "",
    "data": "\"\\\"{\\\\\\\"bankUserId\\\\\\\":\\\\\\\"3412691eeaca4e4794a73bed0f59937a\\\\\\\",\\\\\\\"userId\\\\\\\":\\\\\\\"60eec629bc4e4320aaca49df8875bc1a\\\\\\\",\\\\\\\"elecCardNo\\\\\\\":\\\\\\\"4539837594582378\\\\\\\"}\\\"\""
}
6ss1mwsb

6ss1mwsb12#

实测,外面套一个StringEscapeUtils.unescapeJava方法即可去掉转义。

import org.apache.commons.lang.StringEscapeUtils;
StringEscapeUtils.unescapeJava(JSON.toJSONString(response))
cfh9epnr

cfh9epnr13#

集成第三方时,比如Springdoc,第三方输出是用 字符串 形式的Json,结果被Fastjson多加了反斜杠,怎么整?

wfsdck30

wfsdck3014#

  • -,估计是没人回答了,那只能转jackson了,好烦

相关问题