javascript - 从 js Map 和 String 创建 json 字符串

标签 javascript json

我的 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/

相关文章:

javascript - 纯JS在多个相同id的div中添加类

javascript - 在 firefox 扩展中读取本地 json 文件

javascript - 通过解析 JSON 对象返回父级

javascript - 为什么使用 Knockout.js 时数据没有出现在 HTML 字段中

javascript - 在 javascript 中使用反射来获取失败时测试函数的名称

javascript - 将 Vue 查询参数从当前路由传递到 router-link

ios - JSONSerialization 选项有什么作用,它们如何改变 jsonResult?

javascript - npm start 没有获取更新的 package.json

java - JSON 解析。字符串作为 Json 对象数组

javascript - jQuery - 如何编写类来实现 OO 设计