我的 REST Controller 需要以下格式的请求输入,它成功地将其转换为包含 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} 和一个字符串的映射。我一直在尝试像这样将其转换为 json 字符串,但它似乎不起作用:
var myJson = {};
myJson.myMap = myMap;
myJson.myString = myString;
var json = JSON.stringify(myJson);
但是,我最终得到以下字符串:`{"myMap":{},"String":"myString"}'。所以我可能不得不做一些不同的事情来对 map 进行字符串化,但我尝试的任何事情都没有奏效。
谁能帮帮我?
最佳答案
您可以编写一个简短的转换函数,将映射转换为可以字符串化的对象。
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)
这是一个可能在 Map 存在但其他一些 ES6 构造不存在的情况下工作的版本(尽管这似乎是一个编辑器设置问题)。
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)
关于javascript - 从 js Map 和 String 创建 json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44740423/