Javascript 如何使用node.js中的ecma6(typescript)解析到json的映射
使用下面的代码,我在app.js中使用节点5.1和typescript 6.1.2时出错 我试图解析的文件是来自firefox的bookmark.json。 我的目标是将其解析为一个映射,使用它并将其解析回jsonJavascript 如何使用node.js中的ecma6(typescript)解析到json的映射,javascript,json,node.js,ecmascript-6,Javascript,Json,Node.js,Ecmascript 6,使用下面的代码,我在app.js中使用节点5.1和typescript 6.1.2时出错 我试图解析的文件是来自firefox的bookmark.json。 我的目标是将其解析为一个映射,使用它并将其解析回json 'use strict'; declare function require(name:string); let fs = require('fs'); fs.readFile( './bookmarks.json', 'utf8', handleFi
'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
}
我得到了一个语法错误和一个意外的标记
for(让[k,v]为strMap)
如何修复它
如何将这样的映射从firefox bookmarks.json解析回json?好的,下面是我的解决方案:
我使用来自的json8库
是否有特别的理由不只是使用
JSON.parse(data)
和JSON.stringify(dataMap)
?@macareno.marco:除此之外,OP受文件模式的限制
'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
}