我的REST控制器需要以下格式的请求输入,它成功地将其转换为包含Map和String作为参数的Java对象:
{
"myMap" : {
"key1": "value1",
"key2": "value2",
"key3": "value3"},
"myString": "string value"
}
我从HTML表单中获取数据,如下所示:
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);
}
}
}
基本上,这段代码可以归结为:
var myMap = new Map();
myMap.set("key1", "value1");
myMap.set("key2", "value2");
myMap.set("key3", "value3");
这会产生一个包含{key1 => value1,key2 => value2,etc}和一个String的Map。我一直试图将其转换成像这样的JSON字符串,但似乎不起作用:
var myJson = {};
myJson.myMap = myMap;
myJson.myString = myString;
var json = JSON.stringify(myJson);
但是,我最终得到了以下字符串:`{"myMap ":{}," String ":" myString "}'。所以我可能需要做一些不同的事情来串一个Map,但我尝试没有任何工作。
有人能帮帮我吗?
7条答案
按热度按时间woobm2wo1#
你可以写一个简短的转换函数,把Map变成一个可以被字符串化的对象。
这里有一个版本,它大概可以在Map存在但其他一些ES6结构不存在的情况下工作(尽管这看起来像是编辑器设置问题)。
i2loujxw2#
使用ES6语法,特别是如果你有嵌套Map(否则Idan Dagan's answer会更简单),你可以使用 JSON.stringify() 的第二个参数,reducer,如下所示:
qojgxg4l3#
JSON字符串化对对象、数组和函数有特殊的行为。
例如:
解决这个问题的一种方法是为它定义一个toJSON()方法,该方法返回对象的JSON安全版本。
第二,也是更简单的,使用ES6语法:
rvpgvaaj4#
您可以使用
Array.prototype.reduce
和扩展符号来简洁地将Map转换为所需的格式。1aaf6o9v5#
这个黑客可以完成这项工作(但它是一个全局覆盖,必须小心使用):
mw3dktmi6#
您可以按如下方式初始化myMap,而不是Map
将其中的元素设置为-
最后,在转换时,您可以执行以下操作-
lrpiutwd7#
这是es6中最好的方法