Существует ли класс Java, который обеспечивает вложенность произвольной глубины для преобразования в объект JSON? - PullRequest
0 голосов
/ 29 апреля 2020

Я подозреваю, что должен быть какой-то Java класс или библиотека, которую я пропускаю и которая обеспечивает нужную мне функциональность:

Содержимое My Select Input может быть довольно большим, и я хочу отобразить их иерархически для улучшения читаемости (см. пример ниже). Вложенность может достигать любой произвольной глубины.

Weapons
  Swords
    1-handed
      Katanas
      Bokin
    2-handed
      Zweihänder
  Spears
    Angon
Food
  Meat
    Fish
      Angel
  Pasta
...

Я не использую OptGroup, потому что мне нужно, чтобы коллекции сами выбирались. Сначала я искал в Интернете ссылки на класс дерева Java. Не найдя ничего, я рекурсивно собрал данные для своих опций на стороне сервера в HashMap из HashMaps из HashMaps, полностью вниз и затем вызвав new Gson().toJson(data). На стороне клиента я рекурсивно обходит это, вызывая ключи для каждого значения, дополняя текст до глубины соответствия. Это работало некоторое время, пока я не понял, что мои значения Option должны отличаться от текста Option. Теперь я снова в растерянности, потому что коллекция HashMap не выглядит так, как будто она справится с этим дополнительным измерением.

Раньше я не пытался писать JSON вручную, но я думаю, что JSON, который я хочу отправить сейчас, может выглядеть примерно так:

{
   'name' : 'Weapons',
   'id' : 45,
   {
      'name' : 'Swords',
      'id' : 32,
      {
        'name' : '1-handed',
        'id' : 341,
        {
          'name' : 'Katanas',
          'id' : 3
        },
        {
          'name' : 'Bokin',
          'id' : 9
        }
      }
   }
}

минус Существующее решение там, я думаю, мой следующий план будет сделать класс, который хранит свои собственные данные опций плюс массив экземпляров того же самого класса. На глубоком конце решений, возможно, я мог бы научиться правильно форматировать JSON и использовать StringBuilder и рекурсию для создания объекта JSON. Но разве нет решения этой проблемы, которое использует готовые библиотеки?

1 Ответ

0 голосов
/ 29 апреля 2020

Вы находитесь на правильной дорожке a с Map<String, Object>, поскольку она может быть сколь угодно глубокой.

Вам необходимо назвать список вложенных узлов, например, вызвать его children, но вы, конечно, можете назвать его как угодно:

{
    "name": "Weapons",
    "id": 45,
    "children": [{
        "name": "Swords",
        "id": 32,
        "children": [{
            "name": "1-handed",
            "id": 341,
            "children": [{
                "name": "Katanas",
                "id": 3
            }, {
                "name": "Bokin",
                "id": 9
            }]
        }]
    }]
}

В Java хотя, лучшим способом было бы использование безопасных от типов объектов вместо простых карт:

class Node {
    private String name;
    private int id;
    private List<Node> children;

    // constructor, getters and setters here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...