当前位置: 首页 > 知识库问答 >
问题:

从js Map和String创建json string

曹茂材
2023-03-14

我的REST控制器需要以下格式的请求输入,它成功地将其转换为包含映射和字符串作为参数的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=的映射

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

但是,我最终会得到以下字符串:'{"myMap":{},"String":"myString"}'。所以我可能必须做一些不同的事情来对地图进行字符串化,但是我尝试的都不起作用。

有人能帮我吗?

共有3个答案

笪烨
2023-03-14

JSON字符串化对对象、数组和函数具有特殊的行为。

例如:

JSON.stringify( function(){} ); // output: undefind
JSON.stringify( [2,undefined,function(){}, 5] ); //output: "[2,null,null,5]"

解决这个问题的一种方法是为其定义一个toJSON()方法,该方法返回对象的JSON安全版本。

var myJson = {};
myJson.toJson = function() {
    return {  /* what ever you need*/}
}

其次,更简单的是,使用ES6语法:

JSON.stringify([...myMap]);
那宏大
2023-03-14

使用ES6语法,尤其是如果您有嵌套映射(否则IdanDagan的答案更简单),您可以使用JSON。stringify()的第二个参数是reducer,如下所示:

JSON.stringify(myMap, (key, value) => (value instanceof Map ? [...value] : value));

柴博
2023-03-14

您可以编写一个简短的转换函数,将映射转换为可以字符串化的对象。

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)
 类似资料:
  • 我有以下课程: 我想使用Java流创建一个

  • 本文向大家介绍String s = new String("xyz");创建了几个String Object?相关面试题,主要包含被问及String s = new String("xyz");创建了几个String Object?时的应答技巧和注意事项,需要的朋友参考一下 答: 两个对象,一个是“xyx”,一个是指向“xyx”的引用对象s。    

  • 问题内容: 我的私钥和公钥在base64中的字符串中,该字符串使用ANS1 DER进行编码。我尝试创建Java 和的实例: 我在中收到以下错误。 我猜我应该对公共密钥做类似的事情,就像在第2行和第3行中对私有密钥做一样。因为证书也是加密的。有什么建议? 问题答案: 为了测试您的方案,我创建了一个RSA私钥。 然后,我已将此密钥转换为PKCS#8 DER格式。 的手册将PKCS#8和DER都称为 格

  • 问题内容: MySQL中有没有办法从DATE类型的给定属性和TIME类型的给定属性创建DATETIME? 问题答案:

  • 我有一个类似这样的JSON: 我正在尝试将此结构映射到 Spark 架构。我已经创建了以下内容;但是它不起作用。我还尝试在值字段映射中移除。 另外,请注意,它们“key1”和“key2”是动态字段,将使用唯一标识符生成。也可以有两个以上的键。有没有人能够将数组类型映射到结构类型?