ES6で追加されたMapオブジェクトをJSONにstringify
したくて調べた
とりあえずやってみた(失敗)
とりあえず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']] ]
このMap
をArray
にする方法を利用する
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の要素が増えた時に変換にかかる時間は変わるのか気になるので今度試してみようと思う