[alibaba/fastjson]如何限制反序列化的嵌套层数

2025-11-24 273 views
9

假设一份json数据包含100层,而正常数据只有10层,那我要怎么快速响应这个请求?难道等100层解析完成后,再去检查是否超过10层?能否一开始就直接限制嵌套层数,使得在反序列化过程中能够快速检测出?或者说在反序列化时候能否回调出父节点,子节点的信息,然后自定义处理?

回答

3

json序列化反序列化的性能相对于业务处理还是很快的,实际应用里需要考虑这种情况的很少。一种简单的变通方式是在json生成的地方,先去掉自己不想要的。

5

@kimmking 如果是api接口提供给用户,完全无法限制用户的行为而只能检查,现在检查的时候就需要快速响应了!或许单个请求这点资源不算啥,大并发处理,资源占用一下就上来了!

9

我就想说在ObjectDeserializer的deserialze里面加入一个计数器,递归的时候,计算最大深度就完了,就两三句代码,自己改源码了,只是以后同步版本恼火了...

4

@wenshao 不是哦,这是序列化接口!我说这个是反序列化接口。假设用户POST一个jon字符串,你是不是需要验证该字符串是否为json?那么在验证的时候,能否设置嵌套层数,比如我的业务最多只有6层,而fastjson只要验证到6层还有嵌套层立即返回失败或者抛出异常,而没必要浪费时间在多余的错误的潜逃层上!