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()
, и теперь я не могу преобразовать объект карты в строку.
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()]
для формирования того же массива записей.
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
Это потому, что 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
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.