ゆずめも

私による私のためのメモ的なブログです。主に勉強した事について書いてます。

es6のMapをJSONに変換

ES6で追加されたMapオブジェクトをJSONstringifyしたくて調べた

developer.mozilla.org

とりあえずやってみた(失敗)

とりあえずJSON.stringifyにmapオブジェクト渡してみる

let m = new Map()
m.set('key', 'val')
console.log(JSON.stringify(m)) //=> {}

何も入ってない。とりあえず突っ込んでもさすがに無理か

Google様に頼ってみる

こんな英語のサイト見つけた

Converting ES6 Maps to and from JSON

2通りのやり方が乗ってるんだけど、後者のkeyがstringのものって汎用性低い気が…というわけで1つ目の方

MDN読んでもいまいちどうしてこういう動作になるかわからないのだけどMapオブジェクトを[...map]という風にすると配列として展開されるらしい

let map = new Map().set('key', 'val').set({hoge: 1}, ['abc'])
[...map] //=> [ ["key", "val"], [{hoge: 1}, ['abc']] ]

このMapArrayにする方法を利用する

Map to JSON

let map = new Map().set().set() //何かkeyとvalが設定されていると仮定して
JSON.stringify([...map])

とするとmapオブジェクトがJSON文字列になる

JSON to Map

今度は逆にJSON文字列をMapオブジェクトに

let jsonStr = "~" // 省略
let map = new Map(jsonStr)
console.log(map) //=> マップオブジェクト

これでJSON文字列をMapオブジェクトに変換できる

まとめ

今回のテストでは要素数が少ないMapオブジェクトを配列に変換して、JSON化してるけど、Mapの要素が増えた時に変換にかかる時間は変わるのか気になるので今度試してみようと思う