【问题标题】:Convert Java Map to Javascript Map将 Java 地图转换为 Javascript 地图
【发布时间】:2012-11-30 05:02:54
【问题描述】:

我有一个 Java 地图。我想把它转换成 JavaScript 地图。

转换成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}

请建议我如何实现这一目标?

【问题讨论】:

  • 您是否有任何理由需要将键用双引号括起来?您已经有一个有效的 JavaScript 对象。如果这是绝对要求(同样,我想不出一个原因),请查看返回 JSON

标签: java javascript jsp


【解决方案1】:

您也许可以为此使用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 类。它给出了找不到类路径。
  • 感谢 cowls,我可以在类路径中添加。但是,我仍然将字符串作为 {en=true, de=false, fr=false} (JSP map) 而不是 {"en":true, "de":false, "fr":false} (javaScript map ) 在 JSP 页面中。
  • 我需要查看代码。确保你还没有返回 langSel,因为这是一个 java Map 并且会给出输出,你应该返回 json 对象
  • 感谢 cowls,它工作正常。实际上,我通过新的 JSONObject() 函数创建了一个 JSONObject,然后通过将第二个字符串转换为布尔值,将每个映射条目添加到 jsonObj。现在,它工作正常。谢谢。
【解决方案2】:

而不是下一行

langSel.add("en", true);

使用这条线

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

试试这个可能会有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多