将Java Map转换为Javascript Map

6

我有一个Java Map,想把它转换成JavaScript的Map。

将其转换为JS Map的Java函数如下:

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 - Anthony Grist
2个回答

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 类在您的类路径中。可以手动下载 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


如何获取JSONObject类。它显示类路径未找到。 - Rajasekhar
谢谢cowls,我已经成功添加了类路径。但是,在JSP页面中,我仍然得到了字符串{en=true, de=false, fr=false}(JSP映射),而不是{"en":true, "de":false, "fr":false}(JavaScript映射)。 - Rajasekhar
我需要看代码。请确保您没有返回langSel,因为这是一个Java Map并将提供该输出,您应该返回JSON对象。 - cowls
谢谢,cowls。它正常工作了。实际上,我通过new JSONObject()函数创建了一个JSONObject,然后通过将第二个字符串转换为布尔值将每个映射条目添加到jsonObj中。现在,它正常工作了。谢谢。 - Rajasekhar

2

以下是替代方案:

langSel.add("en", true);

使用这行代码。
langSel.add("\"en\"", true);

试一下这个,可能有帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接