2012-12-12 122 views
5

我有一個Java地圖。我想將它轉換爲JavaScript地圖。將Java地圖轉換爲Javascript地圖

Java函數爲JS圖轉換如下:

private Object getJSLocalizedValueMap() { 

    Map<String, String> langSel = new HashMap<String, String>(); 
    langSel.add("en", true); 
    langSel.add("de", false); 
    langSel.add("fr", false); 

    //Now convert this map into Javascript Map 
    NativeObject nobj = new NativeObject(); 
    ScriptEngineManager factory = new ScriptEngineManager(); 
    ScriptEngine engine = factory.getEngineByName("javascript"); 
    for (Map.Entry<String, String> entry : langSel.entrySet()) { 
     nobj.defineProperty(entry.getKey(), entry.getValue(), NativeObject.READONLY); 
    } 
    engine.put("langSel", nobj); 
    return langSel; 
} 

在JSP頁面的JavaScript代碼:

var langs = ${messagesJS}; 

在Javascript中,我得到了:

langs = {en=true, de=false, fr=false}; 

而不是

langs = {"en":true, "de":false, "fr":false} 

請問我該如何做到這一點?

+1

是否有任何理由**需要**將密鑰用雙引號括起來?你已經有了一個有效的JavaScript對象。如果這是一個絕對的要求(再次,我想不出一個單一的原因),看看返回[JSON](http://json.org)。 –

回答

5

您可能可以使用JSONObject類。它有一個構造函數,你通過Map。調用它,然後調用toString()方法,它應該給你一個JS數組。

http://www.json.org/javadoc/org/json/JSONObject.html#JSONObject%28java.util.Map%29

因此,像:

Map<String, String> langSel = new HashMap<String, String>(); 
langSel.add("en", true); 
langSel.add("de", false); 
langSel.add("fr", false); 

JSONObject jsonObj = new JSONObject(langSel); 
engine.put("langSel", jsonObj.toString()); 

您需要確保org.json.JSONObject類是在classpath。無論是下載JAR和手動添加到類路徑(通過Eclipse或東西),或者如果你正在使用Maven使用像依賴以下:

<dependency> 
    <groupId>org.json</groupId> 
    <artifactId>json</artifactId> 
    <version>20070829</version> 
    </dependency> 

如果你不使用Maven,你仍然可以從這裏下載JAR :http://mvnrepository.com/artifact/org.json/json/20090211

+0

如何獲取JSONObject類。它沒有找到類路徑。 – Rajasekhar

+0

更新了答案 – cowls

+0

謝謝cowls,我可以在班級路徑中添加。但是,仍然以{en = true,de = false,fr = false}(JSP地圖)而不是{「en」:true,「de」:false,「fr」:false} )在JSP頁面中。 – Rajasekhar

1

反而低於線

langSel.add("en", true); 

使用此行

langSel.add("\"en\"", true); 

試試這可能有幫助。