2012-05-25 39 views
1

在我的Java代碼中,我有一個類的成員類型爲Map<String,String>。我使用谷歌Gson庫從對象轉換爲JSON字符串和反之亦然。如何獲得相同的結果與谷歌Gson和JSON.stringfy

我想用JavaScript和json.org的JSON庫做同樣的事情。

問題是JavaScript沒有「地圖對象」,如果我使用數組來模擬地圖,數組上的JSON.stringify的結果與Map<String,String>上的Gson不一樣。

我也嘗試從庫jshashtable 2.1(http://www.timdown.co.uk/jshashtable/index.html)哈希表javascript對象和創建一個自定義toJSON方法,但這種方法沒有工作,因爲什麼在這些情況下,JSON會將由自定義返回的對象string化爲JSON方法。

這就是我得到:

Java和GSON:

{ 
    "var_1": "value_1", 
    "var_2": "value_2", 
    "map": { 
     "name_1": "value_1", 
     "name_2": "value_2" 
    } 
} 

JavaScript和JSON:

{ 
    "var_1": "value_1", 
    "var_2": "value_2", 
    "map": [ 
     ["name_1", "value_1"], 
     ["name_2", "value_2"] 
    ] 
} 

有什麼辦法來解決這一點,並獲得相同「 json字符串「從Java和JavaScript?

在此先感謝...

回答

1

問題是JavaScript有沒有 「地圖對象」 ......

是的,它的作用:所有 JavaScript對象是地圖。爲了讓你在找什麼,你會創建該對象圖:

var obj = { 
    "var_1": "value_1", 
    "var_2": "value_2", 
    "map": { 
     "name_1": "value_1", 
     "name_2": "value_2" 
    } 
}; 

...並在其上使用JSON.stringify

var json = JSON.stringify(obj); 

var obj =看起來很熟悉嗎?這是因爲它是一個JavaScript object initializer,而JSON是對象初始化程序語法的子集。 :-)如果你喜歡你可以建立在其他方面該對象:

var obj = {}; 
obj.var_1 = "value_1"; 
obj.var_2 = "value_2"; 
obj.map = {}; 
obj.map.name_1 = "value_1"; 
obj.map.name_2 = "value_2"; 

...這也會給你打電話就可以了JSON.stringify後,同樣的事情。

+0

完美!我想投你的答案,但我沒有足夠的聲譽。非常感謝你 ! – Nicolas

+0

@尼古拉斯:很好,這很有幫助。 –

相關問題