【问题标题】:When should an object be used instead of a json object?什么时候应该使用对象而不是 json 对象?
【发布时间】:2015-08-08 17:07:00
【问题描述】:

我正在用java设计一个程序

  1. 很多对象只是数据包,并不需要任何非静态方法。

  2. 我想从硬盘轻松保存和加载对象。

  3. 一些对象实例需要一个额外的属性,我可能会随着时间的推移添加或删除。

  4. 如果某些对象确实具有附加属性,那么我仍然会在大多数情况下将它们视为完全相同的对象。

似乎一个很好的解决方案是在运行时以 JSON 格式存储这些对象,并且从不实际为它们定义专用对象。你有什么理由不想这样做吗?即是否有任何理由以 json 格式存储对象只是为了方便而成为不好的做法?

【问题讨论】:

  • 存储为 JSON 绝对是一个很好的解决方案。尽管如果您不在 Java 中为它们定义一个类,您将无法获得静态类型的任何好处。
  • 使用 HashMap 来保存值,并使用 JSON 库(如 Jackson)来读取/读取文件
  • 如果您只是将对象视为纯数据,例如从 A 到 B 的传输,JSON 就可以了。如果您想操作/更改数据的属性,如果您想直接访问其中的属性,则转换为对象会更简单。您还可以使用上述库来简化此操作。因此,这取决于您需要进行多少操作。
  • 有些人,比如 Pythonistas,一生都以这种方式生活。

标签: java json oop object jsonobject


【解决方案1】:

如果您来自 Objective-C / PHP(或其他语言)字典或其他类型的映射,则键/值对很常见。

但在 Java 中,通常首选强类型对象:有时称为 POJO(普通旧 Java 对象)。 Java 是一种面向对象的语言,您可以从 OO 概念中获益。对于非常小的应用程序并不总是很明显,但通常这是要走的路。强类型对象涉及更多样板代码,但任何现代 IDE 都会为您完成(生成 getter/setter)。所以这不是反对它的理由。

最重要的是,使用 Jackson / GSon / Moxy 将 POJO 对象从 JSON 存储到 JSON 非常容易。有许多优秀的 JSON 提供程序/库可以在没有任何配置(或很少)的情况下与 POJO 一起使用。

我可以立即看到的其他优势:

  • 在使用 pojo IDE 时,还会在编码时向您显示可用的 getter/setter。

  • 今天您可以将“对象”以 JSON 格式存储在磁盘上,明天您可能会将它们存储在数据库中。您可以通过几组注释轻松地从 Jackon 序列化(或您喜欢的 JSON 库)切换到 JPA。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2012-06-02
    • 2010-11-12
    • 2023-04-10
    • 2020-04-07
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多