FastJson 的JSON.toJSON方法吃掉了Map的key

发布于 2022-09-12 00:23:36 字数 896 浏览 38 评论 0

public static void main(String[] args) {  
    File file = new File("C://Users//Desktop//test.jpg");  
 try (InputStream inputStream = new FileInputStream(file)) {  
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();  
  IOUtils.copy(inputStream, byteArrayOutputStream);  
 byte[] bytes = byteArrayOutputStream.toByteArray();  
  ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);  
  Map<String, Object> map = Maps.newHashMap();  
  map.put("test", byteArrayInputStream);  
  Object object = JSON.toJSON(map);  
  System.out.println();  
  }catch (Exception e){  
  
    }  
}

当执行上段代码时,我惊奇地发现经过toJson方法后,获得的object的value竟然是空的,我断点进JSON里看过,在处理value时又进行了一次toJSON的操作,然后一次序列之后,value消失了
image.png

不知道是不是和ByteArrayInputStream的序列化有关,希望大神帮忙解答一下,十分感谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

柳若烟 2022-09-19 00:23:36

倒不是FastJson吃掉了Mapkey,而是可能要明白序列化的意义哈

序列化不就是为了把对象转换成字节,然后方便存储,传输么
反序列化不就是为了把字节转换为对象,或者数据应该有的表现形式

因此那stream里的各种InputStreamOutputStream实现本身就是字节序列啊,还有啥可序列化的呢

比如你就是读图片噻,图片你看着是图片的样子,但是你代码去读还是只能按照字节去读,这个就是反序列化了嘛

因此不是FastJson吃掉了Mapkey,是人家压根就不会考虑处理stream(就像你本来就结婚扯证,但还要跑去民政局去扯结婚证,不要冒充单身狗哈~)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文