Пытаюсь понять, как создать вложенный JSON на основе HashMap. В основном у меня есть список HashMap, в котором есть неуникальные пары ключ / значение. И мне нужно превратить этот список HashMap в уникальный объект JSON.
Вот пример того, что я пытаюсь описать: Список HashMap выглядит так:
[
{PERIOD: 201801, ID: 12345},
{PERIOD: 201801, ID: 12346},
{PERIOD: 201801, ID: 12347},
{PERIOD: 201802, ID: 12345},
{PERIOD: 201802, ID: 12347},
{PERIOD: 201803, ID: 12345},
]
И я бы хотел, чтобы мой результат был:
{
"NAME": "Results",
"DETAILS": [
{
"PERIOD": 201801,
"DETAILS": [
{ "ID": 12345 },
{ "ID": 12346 },
{ "ID": 12347 }
},
{
"PERIOD": 201802,
"DETAILS": [
{ "ID": 12345 },
{ "ID": 12347 }
},
{
"PERIOD": 201803,
"DETAILS": [
{ "ID": 12345 }
}
]
}
Одно предостережение заключается в том, что пара ключ / значение в HashMap может быть любым количеством элементов, а не только двумя, как я описал в примере выше. Я пробовал выполнять рекурсивную функцию, но все время натыкаюсь на стену.
Обновлено: это не дубликат этот вопрос. Я знаю, как сериализовать HashMap в JsonObject с помощью этих методов. Я делал это несколько раз. Я спрашиваю, как логически анализировать данные, находящиеся в HashMap, и создавать JsonObject на основе этой логики.
Изменить 2: Пример нескольких уровней:
[
{PERIOD: 201801, ID: 12345, MANAGER: "Dave"},
{PERIOD: 201801, ID: 12345, MANAGER: "Jill"},
{PERIOD: 201801, ID: 12346, MANAGER: "Dave"},
{PERIOD: 201801, ID: 12347, MANAGER: "Jon"},
{PERIOD: 201802, ID: 12345, MANAGER: "Rob"},
{PERIOD: 201802, ID: 12347, MANAGER: "Dave"},
{PERIOD: 201803, ID: 12345, MANAGER: "Bailey"},
]
А вот и JSON:
{
"NAME": "Results",
"DETAILS": [
{
"PERIOD": 201801,
"DETAILS": [
{
"ID": 12345,
"DETAILS": [
"MANAGER": "Dave",
"MANAGER": "Jill"
]
},
{
"ID": 12346,
"DETAILS": [
"MANAGER": "Dave"
]
},
{
"ID": 12347,
"DETAILS": [
"MANAGER": "Jon"
]
}
},
{
"PERIOD": 201802,
"DETAILS": [
{
"ID": 12345,
"DETAILS": [
"MANAGER": "Rob"
]
},
{
"ID": 12347,
"DETAILS": [
"MANAGER": "Dave"
]
}
},
{
"PERIOD": 201803,
"DETAILS": [
{
"ID": 12345,
"DETAILS": [
"MANAGER": "Bailey"
]
}
}
]
}
Я проголосовал за закрытие этого вопроса как дубликата stackoverflow.com/questions/12155800/… - в частности, проверьте этот ответ - stackoverflow.com/a/12156646/717214
Это не дубликат тех других вопросов. Они конкретно спрашивают, как преобразовать HashMap в JSON. Это было бы неплохо, но неприменимо, поскольку мне нужно оценить значения в HashMap и превратить эти ключи в сам объект JSON.
Вы можете привести пример, иллюстрирующий key/value pair in the HashMap can be any number of items?
@ A4L Я сделал правку, чтобы проиллюстрировать добавление еще одного уровня к паре ключ / значение.




Решил эту проблему:
private void insertValueIntoDetails(String key, String value, JsonArray details, int targetIndex, int currentIndex) {
// if the targetIndex equals the currentIndex ?
if (targetIndex == currentIndex) {
// if details doesn't have the value, then insert it
AtomicBoolean hasValue = new AtomicBoolean(false);
details.forEach(item -> {
if (((JsonObject)item).get("ID").getAsString().equals(value.toString())) {
hasValue.set(true);
}
});
if (!hasValue.get()) {
JsonObject o = new JsonObject();
o.addProperty("ID", value);
o.add("Details", new JsonArray());
details.add(o);
}
}
// if the targetIndex > currentIndex
if (targetIndex > currentIndex) {
// call insertValueIntoDetails with key, value, details of the currentIndex, targetIndex, currentIndex + 1
JsonArray deets = getDetails(key, details, currentIndex);
insertValueIntoDetails(key, value, deets, targetIndex, currentIndex + 1);
}
}
Возможный дубликат Как преобразовать хэш-карту в объект JSON в Java