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

Der*_*urn 7 java gwt

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

  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;
  }
Run Code Online (Sandbox Code Playgroud)

我可怕的运气不好吗?或者是否有一种很好的快速方式来获得这两种类型?

(返回值的JSONAr也许也可以......但是实现List接口的东西很好).

Igo*_*mer 5

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

AFAIR,我无法找到任何优雅的解决方案 - 但在我的情况下,我立即使用JsArray对象创建POJO并进一步传递.