何时应该使用对象而不是 JSON 对象?

4
我正在设计一个Java程序,其中许多对象只是数据包而不需要任何非静态方法。我想轻松地将对象保存到硬盘并从硬盘加载对象。某些对象实例将需要一个额外的属性,我可能会随时添加或删除它。如果某些对象确实具有附加属性,则大多数情况下仍将将其视为完全相同类型的对象。
似乎将这些对象以JSON格式存储在运行时是一个不错的解决方案,并且从未实际定义专用对象。您不想这样做的原因是什么?即存储对象时是否以JSON格式为便利是一种不好的做法?

将其存储为JSON绝对是一个不错的解决方案。但是,如果您在Java中没有为它们定义类,则无法获得静态类型的任何好处。 - bhspencer
使用HashMap来保存值,使用JSON库(比如Jackson)来从/到文件进行读取。 - Mike R
1
如果你只是将对象视为纯数据,例如用于从A到B的传输,则JSON很好。如果您想要操作/更改数据属性,则转换为对象可能更简单,如果您想直接访问内部属性。您还可以使用上述库来简化此过程。因此,这将取决于您需要进行多少操作。 - hitz
有些人,比如Python程序员,整个生命都在这种方式下度过。 - Chris Martin
1个回答

1
如果你来自Objective-C/PHP(或其他语言)的字典或其他类型的映射,那么键值对是常见的。
但在Java中,通常更喜欢强类型对象:有时称为POJOs(Plain Old Java Objects)。Java是一种面向对象的语言,您可以从OO概念中获得好处。对于非常小的应用程序并不总是明显,但通常这是正确的方式。强类型对象涉及更多的样板代码,但任何现代IDE都会为您完成它(生成getter/setter)。因此,这不是反对它的论点。
最重要的是,使用Jackson/GSon/Moxy非常容易将POJO对象存储到JSON中或从JSON中读取POJO对象。有许多良好的JSON提供商/库可与POJO一起使用,无需任何配置(或非常少)。
我能看到的其他优点:
  • 使用pojo IDE编码时,也会显示可用的getter / setter。

  • 今天你可以将“对象”存储在磁盘上的JSON中,明天你可能会将它们存储在数据库中。您可以轻松地从Jackon序列化(或您喜欢的JSON库)切换到JPA,并带有一些注释集。

  • 许多框架(JAX-RS,JPA,JAXB)期望强类型对象,并使用反射或类似方法来检查和处理您的对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接