js, map과 set을 JSON으로 만들기

JSON.stringify() 으로 변환되지 않는 Map과 Set

  • 아래와 같이 테스트를 할 경우 Map과 Set은 JSON.stringify() 메서드로 정상적인 json 변환이 되지 않는 것을 확인할 수 있다.
const log = console.log;

let root = {};
root.map = new Map([['kim', 12],['lee', 15]]);
root.set = new Set([1,2,3,4,5]);
root.arr = new Array(['a', 'b', 'c']);
root.arr2 = arr2 = ['','',''];
root.obj = {name : 'choi', age : 17 };

JSON.stringify(root); // {"map":{},"set":{},"arr":[["a","b","c"]],"arr2":["ㄱ","ㄴ","ㄷ"],"obj":{"name":"choi","age":17}} 

Map과 Set을 배열로 변경

  • map과 set을 배열로 변경하면 json으로 변환 가능하다.
  • map은 Object.fromEntries를 사용하며
  • set은 전개 연산자를 사용한다.

map

const map = new Map([['kim', 12],['lee', 15]]);

// entries() -> 동작하지 않는다.
log(JSON.stringify(map.entries()));

// Object.fromEntries(map) -> 정상동작한다.
const objFromMap = Object.fromEntries(map);
log(JSON.stringify(objFromMap)); // 동작한다.

set

// set은 배열로 변경하여 수행한다. 
// 아래는 전개 연산자를 사용하였다. 
let set = new Set([1,2,3,4,5]);
let arr = [...set];
log(arr);