ES7 Map JSON 添加方括号

Posted

技术标签:

【中文标题】ES7 Map JSON 添加方括号【英文标题】:ES7 Map JSON adds square brackets 【发布时间】:2017-04-12 00:39:43 【问题描述】:

我将core-js 用于 Map 集合,因为似乎 ES7 Map 具有 ES6 Map 中不存在的 Map to JSON 功能.

(ES6): JSON.stringify(new Map().set('myKey1', 'val123').set('myKey2', 'val456')); => 

虽然 ES 7 似乎在键值对中添加了不必要的方括号

Eg (ES7): JSON.stringify(new Map().set('myKey1', 'val123').set('myKey2', 'val456')); => [["myKey1","val123"],["myKey2","val456"]]

当我期望这样的时候:

"myKey1": "val123","myKey2":"val456"

请帮忙!

编辑: 我意识到我发布了一个错误的 JSON,但这只是写问题时的输入错误。

重点是,因为我正在使用 TypeScript 创建一个新的 Mapstring 键值对,例如

new Map<string, string>()

我希望此类 Map 的 JSON 输出为 "myKey1": "val123","myKey2":"val456",因此我会就如何获得所需结果征求建议。

【问题讨论】:

"myKey1","val123","myKey2","val456" 不是有效的 JSON。 您的输出是无效的 JSON。对象 () 需要遵循 key: value 格式。 ES7 输出是序列化Map 的唯一方法:由于键可以是任意对象,因此序列化也可以任意嵌套。所以一个单纯的字符串键在这里是行不通的,而是采用[ key, value ] 格式。 我不明白你的问题是什么。您唯一一次使用问号是在陈述事实之后。 【参考方案1】:

这是因为默认映射迭代器是.entries,它产生键值对。如果你想使用另一个迭代器,你必须提供或编程它,例如:

function *flatEntries(map) 
    for (let [k, v] of map) 
        yield k;
        yield v;
    



let m = new Map().set('myKey1', 'val123').set('myKey2', 'val456');
let s = JSON.stringify([...flatEntries(m)]);

console.log(s)

【讨论】:

以上是关于ES7 Map JSON 添加方括号的主要内容,如果未能解决你的问题,请参考以下文章

AFNetworking 2.0 将 [] 方括号添加到发送到服务器的 json

scala map 后加小括号和大括号的区别

golang生成JSON及解析JSON

需要帮助阅读不在括号 [] 内的 Json 对象列表

如何删除单引号,并在转换为to_json后将括号添加到pandas数据框中?

如何匹配引号,自动括号括号括号和括号中的括号?