【问题标题】:Is there a data-structure similar to JSON in JAVA? [closed]JAVA中是否有类似于JSON的数据结构? [关闭]
【发布时间】:2015-08-20 03:55:39
【问题描述】:

我需要根据数据的要求将键值对存储在键值对中等等。

我尝试在 java 中使用 Hash-Map 来实现这一点,但它没有像我预期的那样工作。因为,我的数据有多个 name->value 对,但是 Hash-Map 不断用新的值覆盖 name 键的值。

例如,我需要为在线商店存储产品列表及其详细信息。哪种数据结构可以帮助我实现这一目标以及如何实现?

TIA。

【问题讨论】:

  • redis服务器呢? tutorialspoint.com/redis/index.htm 它通常被称为数据结构服务器,因为键可以包含字符串、散列、列表、集合和排序集合
  • 您确实有 json.org 提供的 java json 库。你可以使用它。
  • 使用 json 库的问题是由于序列化和反序列化 json 字符串而引入的性能开销。

标签: java json data-structures associative-array


【解决方案1】:

如果您想要一个“通用”集合,为什么不使用 Guava MultiMap

将键映射到值的集合,类似于 Map,但在其中 每个键可能与多个值相关联。您可以可视化 多重映射的内容作为从键到非空的映射 值的集合......或作为单个“扁平化”键值对集合

但是,听起来您可能真的想将实体建模为 适当的对象,并具有适当的属性等。存储集合集合的集合会起作用,但您会丢失一些用行为/多态等定义对象的好处。

例如

List<Product> products = ...
products.add(new Book(...));
products.add(new Dvd(...));

(或者可能是库存商品 ID 到对象实例的映射,或者,或者,或者...)

我会将 JSON 视为您的对象的表示形式(例如 XML)。如果您需要传输或存储这些对象,请将它们转换为 JSON 或 XML 等格式。但是在程序中使用具有类型和行为的对象来管理它们。

【讨论】:

  • 谢谢布赖恩,我调查了一下。我可以在没有模型类的情况下使用这个 MultiMap 吗?
  • 您可以将它与任何对象一起使用(前提是equals/hashCode被正确定义)
  • 非常感谢。我快速阅读了它的文档,我认为这将是完美的。还有一件事,我可以将 sql 结果集转换为 Guava MultiMap 吗?
  • 我应该这么认为。也许只需遍历结果集,将每一行转换为一个对象并将其写入给定的合适键
【解决方案2】:

您需要一个 MultiMap,Java 中默认不存在,但您可以在 Guava 或 Apache Commons 等库中找到它。

【讨论】:

    【解决方案3】:

    正如@maskacovnik 所写——使用你自己的类:)

    顺便说一句,您也可以使用 Java 中的 JSON - API docs there

    如果您需要一些容器,您也可以使用hashMap - 所有值都保存为 string 例如。 (对于多值键,您可以使用格式的值,例如 csv ..)

    Hashmap数据结构示例:

    name - name
    surname - surname
    functions - func1;funct2,etc..
    

    虽然您需要读取键的值,但您可以通过string.split(regex) 将它们解析为数组

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-24
      • 2015-04-09
      • 2011-05-19
      • 1970-01-01
      • 1970-01-01
      • 2011-01-08
      • 1970-01-01
      相关资源
      最近更新 更多