2015-11-26 22 views
1

用下面的代碼我使用節點5.1和6.1.2打字稿如何解析映射在node.js中

文件我試圖解析了在app.js錯誤ecma6(打字稿)到JSON是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  
    } 

我得到了一個語法錯誤有一個意外標記爲 (就讓[K,V] strMap)

如何解決呢?

如何將這樣的地圖從firefox bookmarks.json解析回json?

+0

有什麼特別的原因不只是使用'JSON.parse(數據)'和'JSON.stringify(數據圖) '? –

+0

@ macareno.marco:除了[那不起作用](http://stackoverflow.com/a/28918362/1048572),OP受到文件模式的限制 – Bergi

回答

1

好吧,這裏是我的解決方案: 我使用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 

}