2012-12-12 21 views
5

Ich habe eine Java Map. Ich möchte es in JavaScript Map konvertieren.Java Map in Javascript Map konvertieren

Die Java-Funktion als JS Karte konvertieren folgt:

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; 
} 

In der JSP-Seite Script ist der Code:

var langs = ${messagesJS}; 

In Javascript, ich habe:

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

anstelle von

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

Bitte schlagen Sie mir vor, wie Sie das erreichen?

+1

Gibt es einen Grund, warum ** Sie die Schlüssel in doppelte Anführungszeichen setzen müssen? Sie haben bereits ein gültiges JavaScript-Objekt. Wenn es eine absolute Anforderung ist (und ich kann mir auch keinen einzigen Grund vorstellen, warum es so wäre), dann schau dir die [JSON] (http://json.org) an. –

Antwort

5

Möglicherweise können Sie dafür die Klasse JSONObject verwenden. Es hat einen Konstruktor, den Sie in einem Map übergeben. Rufen Sie das an und rufen Sie dann die toString() Methode auf und es sollte Ihnen ein JS-Array geben.

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

So etwas wie:

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()); 

Sie müssen die org.json.JSONObject Klasse stellen Sie sicher auf Ihrem Classpath ist. Entweder laden Sie die JAR und fügen Sie manuell Classpath (durch Eclipse oder etwas) oder wenn Sie Maven verwenden eine Abhängigkeit wie die folgenden verwenden:

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

Wenn Sie nicht mit Maven sind, können Sie immer noch die JAR hier herunterladen : http://mvnrepository.com/artifact/org.json/json/20090211

+0

So erhalten Sie die JSONObject-Klasse. Es gibt Klassenpfad nicht gefunden. – Rajasekhar

+0

Aktualisiert die Antwort – cowls

+0

Danke Kutten, ich bin in der Lage, in den Klassenpfad hinzuzufügen. Aber immer noch bekomme ich die Zeichenfolge als {en = true, de = false, fr = false} (JSP-Map) anstelle von {"en": true, "de": false, "fr": false} (javaScript-Map) auf der JSP-Seite. – Rajasekhar

1

langSel.add("en", true); 

Verwendung dieser Linie

langSel.add("\"en\"", true); 
Statt unterhalb der Linie

Versuchen Sie dies, es könnte hilfreich sein.