java - 在 GWT 中从 JsArray<JavaScriptObject> 转换为 List<JSONObject>

标签 java gwt

在 GWT 中,我的代码中有一个 JsArray。它或多或少是一个 JSON 对象列表,但它的类型是 JsArray。它基本上必须采用这种格式,因为我使用 JSNI 将它作为参数传递给一些外部 JavaScript 代码。麻烦的是,我还希望 Java 代码使用这个值。在 Java 中,我更喜欢处理 List 类型的对象。不过,我还没有真正找到在这两者之间进行转换的好方法。我能做的最好的事情就是线性遍历数组以构建我想要的新类型:

  public List<JSONObject> getData() {
   LinkedList<JSONObject> list = new LinkedList<JSONObject>();
   for (int i = 0; i < data.length(); ++i) {
    list.add(new JSONObject(data.get(i)));
   }
   return list;
  }

我是不是运气太差了?或者是否有一种很好的快速方法来介于这两种类型之间?

(返回一个 JSONArray 值也许也可以……但是实现 List 接口(interface)的东西很好)。

最佳答案

之所以不能轻易地将 JsArray 转换为 List 接口(interface)的任何 Java 实现,是因为 JsArray 只是一个包装器一个很好的 ol' JavaScript 数组。这允许对其进行一些非常快速的操作(因为 JSON 是 JS 的一部分),但代价是与其余的“Java”代码不“兼容”。所以你必须问问自己速度是否是一个重要因素,如果你转换成“Java”列表(当然,它在内部只是一个 JS 数组)你会损失多少。

AFAIR,对于这种情况,我还没有找到任何优雅的解决方案 - 但就我而言,我立即使用 JsArray 对象来创建 POJO 并进一步传递它们。

关于java - 在 GWT 中从 JsArray<JavaScriptObject> 转换为 List<JSONObject>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3125095/

相关文章:

java - 扩展 API 内部错误 : org. powermock.api.extension.reporter.MockingFrameworkReporterFactoryImpl

java - Morphia 嵌入带有泛型的具体类映射

java - 使用 GWT 生成器进行自定义注释

gwt - 通过自定义登录页面将 GWT 与 Spring Security 集成

java - 从第三方获取 JSON 数据并绕过 SOP

java - sun.misc.SharedSecrets 的使用

java - 在 Eclipse 中使用 SQLite

java - 继承接口(interface)的 GWT 类生成器

java - 如何在 GWT 中使用 AsyncCallback 调用 GET 方法

使用 Maven 构建的 jar 中缺少 Java 类