GSON из JSON с числовыми именами классов
У меня есть строка JSON, поступающая с сервера, и я не могу ее контролировать.
Я сгенерировал классы Java с помощью программного использования библиотеки jsonschema2pojo.
Я использую GSON для десериализации JSON в мои объекты Java.
Вот пример JSON.
"description_by_id": {
"50": {
"field1": "value1",
"field2": "value2",
"field3": "value3"
}
}
Этот подкласс "50" - это всего лишь 1 из 18 классов, которые названы одинаково как число.
Когда jsonschema2pojo генерирует класс Java, он, понятно, добавляет подчеркивание для создания имени класса (так, _50).
jsonschema2pojo генерирует класс DescriptionById с этим членом:
@JsonProperty("50")
private com.me.models._50 _50;
И геттер выглядит так (сеттер похож):
@JsonProperty("50")
public com.me.models._50 get50() {
return _50;
}
Я использую GSON так:
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).create();
Но после завершения GSON объект _50 и другие 17, подобные ему, становятся нулевыми, и я проверил, что соответствующие места в JSON действительно заполнены действительными значениями.
Есть ли что-то в этой цепочке, что я могу сделать, чтобы она работала правильно, без необходимости вручную взломать проблему?
1 ответ
Этот "50" подкласс на самом деле просто 1 из 18 классов, которые так же названы как число
И что происходит, когда вы получаете один дополнительный идентификатор, для которого у вас нет класса Java? Гсон не будет знать, что с этим делать...
Не делать уроки. Используйте карту.
Сделайте этот "внутренний" POJO
public class Inner {
private String field1;
private String field2;
private String field3;
}
И внешний POJO
public class Outer {
private TreeMap<String, Inner> description_by_id;
}
И вы бы тогда someOuter.getDescriptionById("50").getField1()
(Добавьте обратно в атрибуты Gson при необходимости)