Обычно описываемый вами рабочий процесс состоит из четырех этапов:
- Сделать запрос
- Получить текст в формате JSON
- Разобрать JSON в объектах JavaScript
- Опишите эти объекты JavaScript, используя тип наложения
Похоже, что шаги 1 и 2 уже работают правильно.
Разобрать JSON
JSONParser.parseStrict
будет хорошо. Вам будет возвращен объект JSONValue
.
Это позволит вам избежать использования вашего собственного нативного метода, а также обеспечит предотвращение выполнения произвольного кода при анализе JSON. Если ваша полезная нагрузка JSON является доверенной и вам нужна грубая скорость, используйте JSONParser.parseLenient
. В любом случае вам не нужно писать собственный метод парсера.
Допустим, вы ожидаете следующего JSON:
{
"name": "Bob Jones",
"occupations": [
"Igloo renovations contractor",
"Cesium clock cleaner"
]
}
Поскольку вы знаете, что JSON описывает объект, вы можете сообщить JSONValue
, что ожидаете получить JavaScriptObject
.
String jsonText = makeRequestAndGetJsonText(); // assume you've already made request
JSONValue jsonValue = JSONParser.parseStrict(jsonText);
JSONObject jsonObject = jsonValue.isObject(); // assert that this is an object
if (jsonObject == null) {
// uh oh, it wasn't an object after
// do error handling here
throw new RuntimeException("JSON payload did not describe an object");
}
Опишите тип наложения
Теперь, когда вы знаете, что ваш JSON описывает объект, вы можете получить этот объект и описать его в терминах класса JavaScript. Скажем, у вас есть этот тип наложения:
class Person {
String getName() /*-{
return this.name;
}-*/;
JsArray getOccupations() /*-{
return this.occupations;
}-*/;
}
Вы можете привести свой новый объект JavaScript в соответствие с этим классом Java, выполнив приведение:
Person person = jsonObject.getJavaScriptObject().cast();
String name = person.getName(); // name is "Bob Jones"