Есть ли структура данных, аналогичная JSON в JAVA?

Мне нужно хранить пары ключ-значение внутри пар ключ-значение и так далее, как того требуют данные.

Я пытался добиться этого с помощью Hash-Map в Java, но это не сработало, как я ожидал. Поскольку мои данные содержат несколько пар имя-> значение, но Hash-Map продолжает перезаписывать значение ключа имени новым.

Скажем, например, мне нужно хранить список продуктов и их детали для интернет-магазина. Какая структура данных поможет мне достичь этого и как?

ТИА.

3 ответа

Решение

Если вы хотите "универсальную" коллекцию, почему бы не использовать Guava MultiMap?

Коллекция, которая сопоставляет ключи со значениями, аналогичными Map, но в которой каждый ключ может быть связан с несколькими значениями. Вы можете визуализировать содержимое мультикарты в виде карты из ключей в непустые наборы значений... или в виде единого "сплющенного" набора пар ключ-значение

Однако может показаться, что вы действительно хотите смоделировать свои сущности как надлежащие объекты с соответствующими атрибутами и т. Д. Хранение коллекций коллекций будет работать, но вы потеряете некоторые преимущества определения объектов с поведением / полиморфизмом и т. Д.

например

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

(или, может быть, карта идентификатора элемента товара на экземпляр объекта, или, или, или...)

Я бы рассматривал JSON как представление вашего объекта (например, как XML). Если вам нужно перенести или сохранить эти объекты, переведите их в такой формат, как JSON или XML. Но управляйте ими в своей программе, используя объекты с типом и поведением.

Вам нужен MultiMap, не представленный по умолчанию в Java, но вы можете найти его в библиотеках, таких как Guava или Apache Commons.

Как писал @maskacovnik - используйте свой собственный класс:)

Кстати, вы также можете работать с JSON в Java - API документы там

Если вам нужен какой-то контейнер, вы можете использовать также hashMap - со всеми значениями, сохраненными в виде строки, например. (для многозначных ключей вы можете использовать значение в формате, например. csv..)

Пример структуры данных Hashmap:

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

И хотя вам нужно будет прочитать значения ключей, вы можете разобрать их в массив string.split(regex)

Другие вопросы по тегам