В 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, хорошо).
Причина, по которой вы не можете легко преобразовать JsArray
в любую реализацию Java интерфейса List
, заключается в том, что JsArray
- это просто оболочка вокруг старого доброго 'Массив JavaScript. Это позволяет выполнять с ним очень быстрые операции (поскольку JSON является частью JS), но за счет того, что он не «совместим» с остальной частью «Java-кода». Поэтому вы должны спросить себя, является ли скорость важным фактором и сколько вы потеряете, если конвертируете в список «Java» (который, конечно, внутренне будет просто массивом JS).
К сожалению, мне не удалось найти какое-либо элегантное решение этой ситуации, но в моем случае я сразу же использовал объекты JsArray для создания POJO и их дальнейшей передачи.
Я совершенно уверен, что вы пробовали метод JSONObject.cast ().