#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.