【问题标题】:Why JSON in Java doesn't Implement Serializable为什么 Java 中的 JSON 没有实现 Serializable
【发布时间】:2017-06-24 16:31:53
【问题描述】:

我最近需要序列化 ​​JSON。在Java中我们不能序列化为Java,因为它没有实现可序列化。我可以将其转换为字符串并序列化,同时将读取的内容作为字符串检索并将字符串转换为JSON。

但是转成字符串进行序列化,反序列化后转成JSON会有开销。

我想避免这种情况的解决方案是序列化和反序列化非常简单。我们可以用 org.json.* 中的每个 Class 重写代码来实现可序列化

我的问题是为什么 JSON 不实现可序列化。 是否有任何特定的理由来避免这种情况

【问题讨论】:

  • JSON 的全部意义在于交换结构化数据,格式化为文本,使用 JSON 语法,可在任何编程语言中写入和读取。不像原生 Java 序列化那样交换二进制数据,只能由 Java 代码读取。你的想法基本上相当于打印一个文本文件,拍照,然后发送JPEG文件,而不是仅仅发送文本文件。
  • JSON 已经是一种序列化格式,一种类似 XML 的文本可读序列化,让您的问题听起来像 XY Problem。无论您要解决什么问题,让 JSON 可序列化都不是您想要的解决方案。
  • @aravinth 如果你想要序列化,为什么要使用 JSON?为什么不序列化原始对象?这没有意义。
  • 我希望它既可以通过 java 进程序列化,又可以与其他东西交换
  • 更糟。为什么用两种不同的方式做同一件事?

标签: java json serialization


【解决方案1】:

实现Serializable 的对象通常会使用本机Java 序列化算法进行序列化(记录在here)。

JSON 旨在与任何语言一起使用,但本机 Java 序列化只能与 Java 一起使用(即使这样它也很脆弱)。因此,在这种情况下,实现Serializable 是没有意义的。

【讨论】:

  • Serializable 与 JSON 没有任何关系,但我认为不会损害任何 JSON。因此,当两个 Java 程序之间的传输可能会更好,我假设
  • Serializable doesn't have anything to do with JSON - 这正是重点,以及为什么不使用它。
【解决方案2】:

为什么我们需要序列化?

序列化是指将对象转换为字节流,其目的是保持对象的状态。 “状态”一词表示变量的值或对其他对象的引用。序列化后得到的字节流可以存储在数据库中,也可以通过网络与远程客户端/服务器进行通信。

使用序列化

使用序列化是为了以后可以反序列化(我们可以得到对象的保存状态)。当我们反序列化时,我们指定我们希望转换的对象。

JSON 表示 JavaScript Object Notation。 它是 JavaScript 对象和 not java 对象的表示法。它是一个符号,而不是一个实际的对象。

Java 不知道如何读取 javascript 对象,因此它无法序列化和反序列化 JSON。因此,当您将 json 转换为 String 时。 java知道如何序列化和反序列化字符串对象。

【讨论】:

  • 'Java 不知道如何读取 JavaScript 对象,因此它不能序列化和反序列化为 JSON':org.json 包正是这样做的。你完全错过了这个问题的真正含义。
猜你喜欢
  • 2012-06-17
  • 1970-01-01
  • 2021-06-09
  • 2010-09-15
  • 2011-06-23
  • 2013-05-01
  • 1970-01-01
  • 2012-01-28
  • 2011-09-20
相关资源
最近更新 更多