Правила парсинга json в Java

218
26 сентября 2017, 05:18

Должны ли названия полей класса и названия типов класса, к которому я парсю Json, полностью соответствовать названию полей, содержащихся в Json? И какие еще есть моменты, которые могут нарушить валидность парсинга?

SignInResponse response = gson.fromJson(result, SignInResponse.class);

После этой попытки парсинга приложение просто вылетает.

Answer 1

По умолчанию должны совпадать, но Вы можете это поменять. Наиболее простой путь -- это применить общий шаблон именования для всех полей. Если Вы используете Gson, то за это отвечает енам FieldNamingPolicy. Используя FieldNamingPolicy Вы, например, можете нормально десериализовывать JSON с pascal-case полями в Java-объекты, у которых имена полей обычно в camel-case. Устанавливается FieldNamingPolicy примерно так:

Gson gson = new GsonBuilder()
    .setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
    .create();

Загляните в документацию, там наверняка есть подходящая для вашего случая политика.

Если по какой-то причине у Вас в джсоне различный шаблон нейминга в одном объекте или какие-нибудь неприятные аббревиатуры, то можно использовать аннотации, которыми можно явно задать ключ, по которому данное поле доступно в JSON. В Gson это аннотация SerializedName (по ссылке есть простой пример использования).

READ ALSO
Настройка логирования GC

Настройка логирования GC

Сделал тестовый класс и запускаю его такой командой (java 8):

211
Вхождение выражения в строку

Вхождение выражения в строку

Необходимо найти все позиции вхождения шаблона в строкеШаблон выглядит как: "a?b", где '?' означает любой символ

232
Создание своих исключений Spring

Создание своих исключений Spring

Есть стандартное исключение в Spring - DuplicateKeyException

214
Изменение курсора мыши cursor:(путь к иконе), pointer;

Изменение курсора мыши cursor:(путь к иконе), pointer;

Господа, читаю документацию, вроде все понятно и проще пареной перы

357