回答編集履歴

2 追記

Lhankor_Mhy

Lhankor_Mhy score 9048

2017/02/25 20:08  投稿

```javascript
Map.prototype.toJSON = function(){
 return Array.from(this).reduce( (sum, [v,k]) => (sum[v]=k, sum), {} )
};
var map = new Map([['a',1],['b',2]]);
map.set('a',new Map([['c',3]]));
JSON.stringify(map);
/*
{"a":{"c":3},"b":2}
*/
```
プロトタイプ汚染をして階層のディープなMap構造をJSONにする方法を思いついたのですが、パースが手間ですねえ……
##### 追記
```javascript
(o => {
 return (function f(o){
   if (Object.getPrototypeOf(o) === Object.prototype){
     return new Map( Object.keys(o).map(k=> [k, f(o[k])]) );
   } else {
     return o;
   }
 })(o)
})(JSON.parse(str));
```
こんな感じか、うーん……
こんな感じか、うーん……
 
##### ひらめいた
これならプロトタイプ汚染されないんじゃないかな?
```javascript
let str='{"a":1}';
let obj = Object.assign(Object.create(null), JSON.parse(str));
```
1 追記

Lhankor_Mhy

Lhankor_Mhy score 9048

2017/02/17 21:17  投稿

```javascript
Map.prototype.toJSON = function(){
 return Array.from(this).reduce( (sum, [v,k]) => (sum[v]=k, sum), {} )
};
var map = new Map([['a',1],['b',2]]);
map.set('a',new Map([['c',3]]));
JSON.stringify(map);
/*
{"a":{"c":3},"b":2}
*/
```
プロトタイプ汚染をして階層のディープなMap構造をJSONにする方法を思いついたのですが、パースが手間ですねえ……
プロトタイプ汚染をして階層のディープなMap構造をJSONにする方法を思いついたのですが、パースが手間ですねえ……
##### 追記
```javascript
(o => {
 return (function f(o){
   if (Object.getPrototypeOf(o) === Object.prototype){
     return new Map( Object.keys(o).map(k=> [k, f(o[k])]) );
   } else {
     return o;
   }
 })(o)
})(JSON.parse(str));
```
こんな感じか、うーん……

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る