【发布时间】:2023-04-01 06:17:01
【问题描述】:
我有一个Map<String, List<Object>>,我想将其转换为JSON。
这是我所拥有的:
第 1 点:声明变量
var map = new Map(), //map
jsonObject= {}, // oject that needs to be converted to JSON
value1 = { topic: "someText1", status: "0", action: "1", comment: "someComment1" }, // values of Map
value2 = { topic: "someText2", status: "0", action: "0", comment: "someComment2" },
value3 = { topic: "someText3", status: "1", action: "1", comment: "someComment3" };
第 2 点: 填充多值映射的函数
function populateMap(map, k, v) {
map[k] = map[k] || [];
map[k].push(v);
}
第3点:填充地图
//地图的关键是网页中各种属性的串联,用|分隔/p>
populateMap(map, 'release|attachment|license1', value1);
populateMap(map, 'release|attachment|license1', value2);
populateMap(map, 'release1|attachment1|license1', value1);
populateMap(map, 'release1|attachment1|license2', value2);
populateMap(map, 'release1|attachment1|license3', value3);
populateMap(map, 'release2|attachment2|license2', value1);
populateMap(map, 'release2|attachment2|license2', value2);
第 4 点: 迭代地图并填充 jsonObject
for (var i in map) {
var keys = i.split('|'), // splitting keys based on |
last = keys.pop(),
values = map[i];
values.forEach(function (item, index) {
keys.reduce((r, a) => r[a] = r[a] || {}, jsonObject)[last] = item;
});
}
第 5 点: 当前输出(jsonObject 打印在控制台上)
{
"release": {
"attachment": {
"license1": "[Object]"
}
},
"release1": {
"attachment1": {
"license1": "[Object]",
"license2": "[Object]",
"license3": "[Object]"
}
},
"release2": {
"attachment2": {
"license2": "[Object]"
}
}
}
第 6 点: 预期输出(jsonObject)
{
"release": {
"attachment": {
"license1": "[Object, Object]" // expecting array of objects here ^^
}
},
"release1": {
"attachment1": {
"license1": "[Object]",
"license2": "[Object]",
"license3": "[Object]"
}
},
"release2": {
"attachment2": {
"license2": "[Object, Object]"
}
}
}
^^ 由于 map 具有该键的对象数组,所以我想在 jsonObject 中拥有对象数组。
有人可以帮助我在 第 4 点中的 map 遍历中进行调整以获得预期结果吗?
【问题讨论】:
-
List,你的意思是Array吗? -
@Ry- 是的。它是数组。抱歉标题中的错误。
标签: javascript json iteration