Страницы

Поиск по вопросам

Показаны сообщения с ярлыком google-gson. Показать все сообщения
Показаны сообщения с ярлыком google-gson. Показать все сообщения

пятница, 12 июля 2019 г.

Android: Использование JSON в приложение

Здравствуйте!
Столкнулся с такой проблемой, парсинг JSON нативным org.json происходит очень медленно, начал искать, нашел ответы (1, 2) где рекомендуют использовать Gson или Jackson. Может у кого есть замеры, насколько быстрее будет происходить разбор? Или может стоит отказаться от JSON, и использовать что нибудь другое для передачи данных?


Ответ

Данных много? Могу сказать что всегда парсил стандартными средствами объемы в несколько сотней записей из JSON-объектов каждый размеров вывода на 21-дюймсвый монитор и это занимало времени около от 3 до 5-7 секунд максимум. Может быть проблема в скорости интернета? Как-то странно вообщем, сколько парсю json стандартной андроидовой штукой - ни разу не сталкивался с подобным.

понедельник, 18 февраля 2019 г.

Преобразование JSON в POJO начиная с определенного уровня вложенности

Есть система, отдающая по REST API здоровенный JSON. На нее я воздействовать не могу ни коем образом.
Из этого огромного JSON-а мне нужна только часть по определенному ключу.
Допустим из этого:
{ "a":{ "b":[.....] }, "c":{.....}, "r":{ "d":{ "e":{ "f":[....], "g":[....] } }, "m":{......} ..... "z":{....} }
Мне нужно сделать POJO структуру начиная с r.d.e
Для того же GSON'а придется создавать как минимум всю ветку, что совершенно излишне (или я заблуждаюсь?)
Есть ли какие библиотеки, которые можно использовать совместно с okhttp3 и которые позволяют организовать такое?


Ответ

Можно вручную разбирать весь JSON пока не дойдёте до нужного узла и только его парсить в объект. Типа как-то так
JsonParser parser = new JsonParser(); JsonObject obj = parser.parse(HUGE_JSON_STRING).getAsJsonObject(); String stringToParseNoramlly = obj.get("r").get("d").get("e").getAsString(); EModel eModel = new Gson().fromJson(stringToParseNoramlly, EModel.class);

суббота, 27 октября 2018 г.

Обобщенный JSON

Сервер присылает ответы в формате
{response: {.......}}
например
{response: {code: 0}} {response: {type: "test"}}
Пытаюсь сделать парсинг при помощи библиотеки gson в таком виде
class Response { private T response; public T getResponse() { return response; } }
class CodeInfo { private int code; }
class TypeInfo { private String type; }
T parse(String str) { Response resp = gson.fromJson(str, Response.class); return resp.getResponse(); }
CodeInfo = parse("{response: {code: 0}}");
Внутренние классы довольно обширные
На конструкции Response.class компилятор меня посылает. Решается ли задача без кучи наследников Response? В принципе, могу даже сменить парсер


Ответ

Спасибо @diraria за направление на путь истинный. Итого получилось
public T parse(String str, Class AClass) { Response resp = JSON.fromJson( str, TypeToken.getParameterized(Response.class, AClass).getType() ); return resp.getResponse(); }
CodeInfo info = parse("{response: {code: 0}}", CodeInfo.class)
Если писать так
public T parse(String str) { Response resp = JSON.fromJson( str, new TypeToken>(){}.getType() ); return resp.getResponse(); }
то строка парсится, но resp.getResponse() возвращает объект класса com.google.gson.internal.LinkedTreeMap