转换多值Map< String,Object []>到javascript中的json [英] convert multi-value Map<String, Object [ ]> to json in javascript
问题描述
我有一个Map<String, List<Object>>
,我想将其转换为JSON
.
I have a Map<String, List<Object>>
and i want to convert it to JSON
.
这里是我所拥有的:
要点1:声明变量
Here is what I have:
Point 1: Declaring variables
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:用于填充多值地图的功能
Point 2: function to populate multi-value map
function populateMap(map, k, v) {
map[k] = map[k] || [];
map[k].push(v);
}
要点3:填充地图
地图的//键是网页中各种属性的连接,以 |
Point 3: populating Map
// key of map is concatenation of various attributes from web page, separated by |
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
Point 4: iterating map and populating 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)
Point 5: current output (jsonObject printed on console)
{
"release": {
"attachment": {
"license1": "[Object]"
}
},
"release1": {
"attachment1": {
"license1": "[Object]",
"license2": "[Object]",
"license3": "[Object]"
}
},
"release2": {
"attachment2": {
"license2": "[Object]"
}
}
}
第6点:预期输出(jsonObject)
Point 6: expected output (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
中具有对象数组.
^^ Since map is having array of objects for that key, So i want to have array of objects in jsonObject
.
有人可以帮助我进行调整吗?需要在第4点中进行map
遍历才能获得预期的结果?
Can someone help me with tweak needs to be done in map
traversal in Point 4 to obtain expected result?
推荐答案
您使用.set
,.get
,.has
和.delete
之类的方法与Map
进行交互;将其元素设置为属性是不正确的.
You use methods like .set
, .get
, .has
, and .delete
to interact with Map
; setting its elements as properties is incorrect.
function populateMap(map, k, v) {
let values = map.get(k);
if (values === undefined) {
map.set(k, values = []);
}
values.push(v);
}
然后遍历地图,如下所示:
Then iterating over the map looks like this:
const jsonObject = {};
for (const [key, values] of map) {
setPath(jsonObject, key.split('|'), values);
}
和您的setPath
实现几乎相同:
function setPath(obj, [...keys], item) {
const last = keys.pop();
keys.reduce((r, a) => r[a] = r[a] || {}, obj)[last] = item;
}
toto:
function populateMap(map, k, v) {
let values = map.get(k);
if (values === undefined) {
map.set(k, values = []);
}
values.push(v);
}
function setPath(obj, [...keys], item) {
const last = keys.pop();
keys.reduce((r, a) => r[a] = r[a] || {}, obj)[last] = item;
}
const map = new Map();
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');
const jsonObject = {};
for (const [key, values] of map) {
setPath(jsonObject, key.split('|'), values);
}
console.log(JSON.stringify(jsonObject));
这篇关于转换多值Map< String,Object []>到javascript中的json的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!