2017-09-06 53 views
2

我在打字稿有一個Map<string, string>變量:轉換打字稿地圖<字符串,字符串>成JSON字符串表示

let m = Map<string, string>().set('tag', 'v1'); 

我想轉換成JSON字符串表示:

'{"tag": "v1"}' 

我我嘗試了3種不同的方式。首先是使用m.toString()。其次是使用JSON.stringify(m)。兩者都返回{}。我甚至試過給Map轉換爲JavaScript object,然後再轉換爲字符串:

function MapToString(map): string { 
    let ro = {}; 
    Object.keys(map).forEach(key => { 
    ro[key] = map[key]; 
    }); 
    return JSON.stringify(ro); 
} 

s = MapToString(m); 

這回{}以及當我試圖打印在控制檯中。

+0

'RO [科]'應該是'RO [關鍵]'不知道如果這是一個錯字。 –

+0

「Map」類型來自哪裏?什麼庫? –

+0

es6「地圖」?嘗試新的Map() – Lostfields

回答

4

我最終放棄了使用ES6地圖和切換到TSMap,其上tags.toJSON()作品。

1

是否可讀?沒有,但它的工作原理

JSON.stringify(
    Array.from(
    new Map().set('tag', 'v1').set('foo', 'bar').entries() 
) 
    .reduce((o, [key, value]) => { 
    o[key] = value; 

    return o; 
    }, {}) 
) 

像@詹姆斯干草指出,你有一個錯字,可能使對象空

+2

使用'[key,val]'而不是參數'e',它會更加可讀IMO。 :-) – Paleo

+0

是啊,我通常忘記那個漂亮的新解構作業:-)謝謝。 – Lostfields

0

您還可以使用ES6傳播,運營商可以將任何ES6地圖與JSON兼容的數據轉換成JSON:

function mapToJson(map) { 
    return JSON.stringify([...map]); 
} 
相關問題