[英]How to parse a Map to json with ecma6 (typescript) in node.js
使用以下代码,我在使用节点5.1和打字稿6.1.2的app.js中遇到错误
我要解析的文件是来自firefox的bookmark.json。 我的目标是将其解析为地图,使用它并将其解析回json。
'use strict';
declare function require(name:string);
let fs = require('fs');
fs.readFile( './bookmarks.json', 'utf8', handleFile );
function handleFile( err, data ) {
function strMapToObj(strMap) {
let obj = Object.create(null);
for (let [k,v] of strMap) {
obj[k] = v;
}
return obj;
}
function strMapToJson(strMap) {
return JSON.stringify(strMapToObj(strMap));
}
function objToStrMap(obj) {
let strMap = new Map();
for (let k of Object.keys(obj)) {
strMap.set(k, obj[k]);
}
return strMap;
}
function jsonToStrMap(jsonStr) {
return objToStrMap(JSON.parse(jsonStr));
}
if(err) throw err;
let myMap = jsonToStrMap(JSON.parse(JSON.stringify(data)));
console.log(myMap); // works well
let result = strMapToJson(myMap);
console.log(result); // returns an error
}
我遇到了语法错误,并带有意外的标记(用于strMap的[k,v])
如何解决?
如何从firefoxbookmarks.json解析这样的地图回到json?
好的,这是我的解决方案:我使用来自https://github.com/JSON8/JSON8的json8库
'use strict';
declare function require(name:string);
let fs = require('fs');
let oo = require('json8');
fs.readFile( './bookmarks.json', 'utf8', handleFile );
function handleFile( err, data ) {
function mapToJson(map) {
return oo.serialize(map);
}
function objToStrMap(obj) {
let strMap = new Map();
for (let k of Object.keys(obj)) {
strMap.set(k, obj[k]);
}
return strMap;
}
function jsonToStrMap(jsonStr) {
return objToStrMap(JSON.parse(jsonStr));
}
if(err) throw err;
let myMap = jsonToStrMap(JSON.parse(JSON.stringify(data)));
//console.log(myMap);
let result = mapToJson(myMap);
console.log(result); // gives the correct object back
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.