Skip to content
This repository has been archived by the owner on Oct 23, 2024. It is now read-only.

问题探讨:fastjson提供了不符合json标准协议的编码 #3024

Open
pantianying opened this issue Feb 17, 2020 · 4 comments
Open

问题探讨:fastjson提供了不符合json标准协议的编码 #3024

pantianying opened this issue Feb 17, 2020 · 4 comments

Comments

@pantianying
Copy link

pantianying commented Feb 17, 2020

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

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

@pantianying pantianying changed the title 问题探讨:fastjson要提供不符合json标准协议的编码方式 问题探讨:fastjson提供了不符合json标准协议的编码方式 Feb 17, 2020
@pantianying pantianying changed the title 问题探讨:fastjson提供了不符合json标准协议的编码方式 问题探讨:fastjson提供了不符合json标准协议的编码 Feb 17, 2020
@vipcxj
Copy link

vipcxj commented Mar 13, 2020

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

@pantianying
Copy link
Author

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

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

@vipcxj
Copy link

vipcxj commented Apr 7, 2020

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

@pantianying
Copy link
Author

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants