如何在node.js中使用ecma6(typescript)解析Map到json

How to parse a Map to json with ecma6 (typescript) in node.js

本文关键字:typescript 解析 Map json ecma6 node js      更新时间:2023-09-26

使用以下代码,我在app.js中使用节点5.1和typescript 6.1.2 时出错

我试图解析的文件是firefox的bookmark.json。我的目标是将它解析为map,使用它并将其解析回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的let[k,v])

如何修复?

如何将这样一个映射从firefoxbookmarks.json解析回json?

好吧,这是我的解决方案:我使用的json8库来自https://github.com/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
}