Преобразование из JsArray <JavaScriptObject> для списка <JSONObject> в GWT

В GWT у меня есть JsArray <JavaScriptObject> в моем коде. Это - более или менее список объектов JSON, но ее тип является JsArray <JavaScriptObject>. Это в основном должно быть в этом формате, потому что я передаю его в качестве параметра некоторому внешнему коду JavaScript с помощью JSNI. Проблема, я также хочу, чтобы это значение использовалось кодом Java. В Java я предпочел бы иметь дело с объектом списка типов <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;
  }

Я ужасно не повезло? Или есть ли хороший быстрый способ добраться между этими двумя типами?

(Возврат JSONArray значений, возможно, был бы в порядке также..., но что-то, что реализует интерфейс List, хорошо).

7
задан Igor Klimer 27 June 2010 в 12:29
поделиться

2 ответа

Причина, по которой вы не можете легко преобразовать JsArray в любую реализацию Java интерфейса List , заключается в том, что JsArray - это просто оболочка вокруг старого доброго 'Массив JavaScript. Это позволяет выполнять с ним очень быстрые операции (поскольку JSON является частью JS), но за счет того, что он не «совместим» с остальной частью «Java-кода». Поэтому вы должны спросить себя, является ли скорость важным фактором и сколько вы потеряете, если конвертируете в список «Java» (который, конечно, внутренне будет просто массивом JS).

К сожалению, мне не удалось найти какое-либо элегантное решение этой ситуации, но в моем случае я сразу же использовал объекты JsArray для создания POJO и их дальнейшей передачи.

5
ответ дан 7 December 2019 в 03:11
поделиться

Я совершенно уверен, что вы пробовали метод JSONObject.cast ().

-2
ответ дан 7 December 2019 в 03:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: