gpt4 book ai didi

Java:HashMap 到嵌套 JSON 对象

转载 作者:太空宇宙 更新时间:2023-11-04 09:59:14 24 4
gpt4 key购买 nike

努力弄清楚如何基于 HashMap 创建嵌套 JSON。基本上我有一个 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 中的键/值对可以是任意数量的项目,而不仅仅是我在上面的示例中描述的两个项目。我尝试过执行递归函数,但总是碰壁。

编辑:这不是 this question 的重复项。我知道如何使用这些方法将 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"
]
}
}
]
}

最佳答案

解决了这个问题:

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);
}
}

关于Java:HashMap 到嵌套 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53707586/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com