Плоский массив JSON в структурированную форму в JAVA

#java #json #jackson

#java #json #джексон

Вопрос:

У меня есть некоторые проблемы с преобразованием плоской структуры JSON в структурированную форму. Мы получаем данные от сервиса в этой форме:

 [
 {'key':"Main1.del[1].x", "value": 0 },
 {'key':"Main1.del[1].y", "value": 1 },
 {'key':"Main1.del[2].x", "value": 5 },
 {'key':"Main1.del[2].y", "value": 7 },
 {'key':"Custom.stat[1].rev.max", "value": 45 },
 {'key':"Custom.stat[1].rev.min", "value": -65 }
]
 

Но нам нужно преобразовать это в эту форму:

 {
 "Main1":{
   "del":[
     {
      "x": 0,
      "y": 1
     },
     {
      "x": 5,
      "y": 7
     }
   ]
 },
 "Custom":{
  "stat":[
   {
    "rev":{
      "max":45,
      "min":-65,
     }
   }
  ]
 }
}
 

Есть ли какое-то решение для этого преобразования в Java? На самом деле мы используем Jackson для сериализации и десериализации данных JSON.

Извините, если есть такая же тема, я ее не нашел.

Ответ №1:

Я не знаю ни о какой библиотеке, делающей это за вас, вы должны написать код для этого самостоятельно:

Вы должны разобрать значения ключей на их элементы, и для этих элементов вы должны создать необходимые структуры по требованию, например "Main1.del[1].x" , средства, которые вам нужны

  • узел объекта верхнего уровня (создайте его, если его еще нет),
  • Main1 поле в этом объекте (создайте его, если его там еще нет),
  • . оператор, означающий, что Main1 это узел объекта (создайте его, если его еще нет),
  • del поле в Main1 (создайте его, если его там еще нет),
  • [1] индексирование, означающее, что del это узел массива, содержащий по крайней мере один или два элемента (в зависимости от индексации массива на основе нуля или единицы — создайте его, если его еще нет — расширьте его, если он слишком короткий),
  • . оператор, означающий, что элемент массива является узлом объекта (создайте его, если его еще нет),
  • x поле в объекте элемента массива (создайте его, если его там еще нет).

Наконец, назначьте value этому последнему узлу.

Для создания ваших структурированных объектов JSON вы также можете использовать Jackson с такими классами, как ObjectNode , ArrayNode и так далее. Но вы также можете захотеть создать это как POJO «на лету», не вводя еще один промежуточный слой JSON.