在 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
只是一个好的 JavaScript 数组的包装器。这允许对其进行一些非常快速的操作(因为 JSON 是 JS 的一部分),但代价是与“Java”代码的其余部分“不兼容”。因此,您必须问问自己,速度是否是一个重要因素,如果转换为“Java”列表(当然,在内部将只是一个 JS 数组),您会损失多少。
AFAIR,我一直无法找到这种情况下的任何优雅解决方案-但就我而言,我立即使用了JsArray对象来创建POJO并将其进一步传递。
关于java - 在 GWT 中从 JsArray<JavaScriptObject> 转换为 List<JSONObject>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3125095/