Monday, June 3, 2024
 Popular · Latest · Hot · Upcoming
160
rated 0 times [  165] [ 5]  / answers: 1 / hits: 45639  / 7 Years ago, sat, june 24, 2017, 12:00:00

My REST controller expects request input of the following format, which it successfully converts to a Java object containing a Map and a String as parameters:



{ 
myMap : {
key1: value1,
key2: value2,
key3: value3},
myString: string value
}


I am getting my data from an html form like so:



var myMap = new Map();
var String = document.getElementById('String').value;
for (var i = 0 ; i<anArray.length ; i++){
var input = document.getElementsByClassName('input_' + (i+1));
for (var j = 0 ; j<3 ; j++){
if (input[j].checked){
myMap.set(input[j].name, input[j].id);
}
}
}


Basically, this code boils down to:



var myMap = new Map();
myMap.set(key1, value1);
myMap.set(key2, value2);
myMap.set(key3, value3);


This results in a map containing {key1 => value1, key2 => value2, etc} and a String. I have been trying to turn this into a json string like so, but it doesn't seem to work:



var myJson = {};
myJson.myMap = myMap;
myJson.myString = myString;
var json = JSON.stringify(myJson);


However, I am ending up with the following string: `{myMap:{},String:myString}' . So I probably have to do something different to stringify a map, but nothing I try is working.



Can anyone help me out?


More From » json

 Answers
6

You can write a short conversion function to make a map into an object that can be stringified.





console.clear()

function mapToObj(map){
const obj = {}
for (let [k,v] of map)
obj[k] = v
return obj
}

const myMap = new Map();
myMap.set(key1, value1);
myMap.set(key2, value2);
myMap.set(key3, value3);

const myString = string value

const myJson = {};
myJson.myMap = mapToObj(myMap);
myJson.myString = myString;
const json = JSON.stringify(myJson);

console.log(json)





Here is a version that that presumably would work where Map exists but some other ES6 constructs do not (though, this seems like an editor settings issue).





console.clear()

function mapToObj(map){
var obj = {}
map.forEach(function(v, k){
obj[k] = v
})
return obj
}

var myMap = new Map();
myMap.set(key1, value1);
myMap.set(key2, value2);
myMap.set(key3, value3);

var myString = string value

var myJson = {};
myJson.myMap = mapToObj(myMap);
myJson.myString = myString;
var json = JSON.stringify(myJson);

console.log(json)




[#57312] Thursday, June 22, 2017, 7 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
leiaf

Total Points: 10
Total Questions: 101
Total Answers: 84

Location: Guam
Member since Tue, Nov 29, 2022
2 Years ago
leiaf questions
Sat, Mar 27, 21, 00:00, 3 Years ago
Wed, Apr 3, 19, 00:00, 5 Years ago
Wed, Jan 16, 19, 00:00, 6 Years ago
;