[alibaba/fastjson]问题探讨:fastjson提供了不符合json标准协议的编码

2024-05-23 312 views
2

在项目重构过程中,发现java投递的mq的消息存在消费时json解析错误的情况,经过排查是fastjson序列化后的[]byte不符合json标准格式。json协议现在是我们用的最多的跨语言编码协议。我认为既然是一种json协议的支持库,如果序列化结果不符合json标准结构,只能本库反序列化是不可接收的。 以下是通过fastjson序列化的不支持标准json的一个例子: { "@type": "com.alibaba.fastjson.JSONObject", "gmtCreate": 1581645198 L, "lang": "zh" }

其他语言的json库无法解析以上的序列化结果。 最后 本人主要不是java开发,所以有些问题可能考虑不周,期待和大家讨论。

回答

3

byte[]非标准序列号确实是个问题,我也遇到过。不过你给的例子根本不是一个概念吧。记得@type好像是fastjson特有的非标准功能弄出的东西,因此只能由fastjson以非标准方式反序列化回去也是可以接受的。 关于byte[],记得fastjson是以base64编码输出,这样可以节省空间。但其他的json库一般直接以数值的数组形式输出,导致互相间不兼容~

5

byte[]非标准序列号确实是个问题,我也遇到过。不过你给的例子根本不是一个概念吧。记得@type好像是fastjson特有的非标准功能弄出的东西,因此只能由fastjson以非标准方式反序列化回去也是可以接受的。 关于byte[],记得fastjson是以base64编码输出,这样可以节省空间。但其他的json库一般直接以数值的数组形式输出,导致互相间不兼容~

这里我说的不是@type,这个字段还是符合json的定义的,关键是1581645198 L,json只有一种数字类型,但这个数字后面加个L是什么鬼,应该是表示java Long?这个简直不能忍。。。 其他语言的库更本无法解析这个json

6

还真没注意到这个L~ 这个操作确实骚,你确定这是fastjson生成的json吗?

3

确定以及肯定。alibaba财大气粗 一般issue都不管。。。。都一千多issue了