var map = new Map();
map.set('key1','value1');
map.set('key2','value2');

console.log(map);
console.log(map.toString());
console.log(JSON.parse(map.toString()))
//Uncaught SyntaxError: Unexpected token o in JSON at position 1

Преобразовал объект карты в строку, используя toString(), и теперь я не могу преобразовать объект карты в строку.

4
VAMSEE MOHAN KRISHNA 30 Авг 2017 в 13:12

3 ответа

Лучший ответ

Чтобы сохранить строковый результат, лучше использовать обычный объект JSON, однако, используя Map, вы можете создать массив записей и преобразовать их в строку

var str = JSON.stringify(Array.from( map.entries()));

А затем снова вы можете проанализировать строку JSON в массив и построить новый Map

var map = new Map(JSON.parse(str))
var map1 = new Map();
map1.set('key1','value1');
map1.set('key2','value2');

var str = JSON.stringify(Array.from( map1.entries()));

//store the string somewhere or pass it to someone
//or however you want to carry it

//re construct the map again
var map2 = new Map(JSON.parse(str))

console.log('key1', map2.get('key1'));
console.log('key2', map2.get('key2'));

Тем не менее, Array.from(map), или using, также возвращает то же самое и может использоваться здесь, но кто-то не может предоставить то, что он на самом деле возвращает, пока не выполнит его, с другой стороны, получение Iterator и последующее формирование массива является более обычным и читаемый, однако Array.from (map) может быть лучшим решением. Также spread operator можно использовать над картой [...map] или map.entries () [...map.entries()] для формирования того же массива записей.

7
Koushik Chatterjee 30 Авг 2017 в 11:00
var map = new Map();
map.set('key1','value1');
map.set('key2','value2');

console.log(map);
//Covert your map object into JSON object
var jsonObj=[];

map.forEach(function(val,key){
var tempObj={};
tempObj[key]=val;
jsonObj.push(tempObj)
})

console.log(JSON.stringify(jsonObj));
console.log(JSON.parse(JSON.stringify(jsonObj)))
//Uncaught SyntaxError: Unexpected token o in JSON at position 1
1
Chandrakant Thakkar 30 Авг 2017 в 10:27

Это потому, что map.toString () печатает [object Map], который не анализируется JSON.parse

Вы должны использовать JSON.stringify для достижения своей цели

Исправленный скрипт

var map = new Map().set('key1','value1')
.set('key2','value2');

console.log(map);
//since the underlying type is array requires to be expanded [...map]
console.log(JSON.stringify([...map])); 

map2 = new Map(JSON.parse(JSON.stringify([...map])));

Помните: карты являются неизменяемыми объектами, а базовый тип является массивом, вам нужно переназначить переменную карты или объединить функции множеств.

Полное объяснение можно найти здесь: http://2ality.com/2015/08 /es6-map-json.html

2
saniales 30 Авг 2017 в 10:25