简体   繁体   English

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

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

with the following code i got an error in app.js using node 5.1 and typescript 6.1.2 使用以下代码,我在使用节点5.1和打字稿6.1.2的app.js中遇到错误

the file i am trying to parse is a bookmark.json from firefox. 我要解析的文件是来自firefox的bookmark.json。 my goal is to parse it to a map, to work with it and parse it back to 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       
    }

i got an syntax error with an unexpected token for (let [k, v] of strMap) 我遇到了语法错误,并带有意外的标记(用于strMap的[k,v])

how to fix it? 如何解决?

how to parse such a map from firefox bookmarks.json back to json? 如何从firefoxbookmarks.json解析这样的地图回到json?

ok, here is my solution: i use the json8 library from https://github.com/JSON8/JSON8 好的,这是我的解决方案:我使用来自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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM