Pojo анализирует gson с недопустимыми именами java
Я работаю с youtube json из google-api-client:
{
"apiVersion": "2.0",
"data": {
"updated": "2011-01-05T13:48:33.146Z",
"totalItems": 4,
"startIndex": 1,
"itemsPerPage": 1,
"items": [
{
"id": "YfUzMkAlOBI",
"uploaded": "2010-12-29T16:50:47.000Z",
"updated": "2010-12-29T16:50:47.000Z",
"uploader": "devandroidcs",
"category": "Entertainment",
"title": "Teste 2",
"description": "Description do teste2",
"tags": [
"mobile"
],
"thumbnail": {
"sqDefault": "http://i.ytimg.com/vi/YfUzMkAlOBI/default.jpg",
"hqDefault": "http://i.ytimg.com/vi/YfUzMkAlOBI/hqdefault.jpg"
},
"player": {
"default": "http://www.youtube.com/watch?v\u003dYfUzMkAlOBI&feature\u003dyoutube_gdata_player",
"mobile": "http://m.youtube.com/details?v\u003dYfUzMkAlOBI"
}
.
.
.
}
в этот момент я должен создать имя поля по умолчанию в моем классе синтаксического анализа java.
Уже выполненный этот синтаксический анализ работает с другими полями, проблема в том, что по умолчанию используется
личное имя java, поэтому я не могу вызывать переменную по умолчанию.
как я могу это сделать?
Ответы
Ответ 1
Я считаю, что ваш ответ заключается в JSON Field Naming Support:
Gson поддерживает некоторое предопределенное поле именования политик для преобразования стандартные имена полей Java (т.е. верблюд с именами, начинающимися с нижнего регистра --- "sampleFieldNameInJava" ) к имени поля Json (т. sample_field_name_in_java или SampleFieldNameInJava).
См., например, следующий пример:
private class SomeObject {
@SerializedName("custom_naming") private final String someField;
private final String someOtherField;
public SomeObject(String a, String b) {
this.someField = a;
this.someOtherField = b;
}
}
Таким образом, вы должны иметь возможность определять сопоставление полей по умолчанию так:
@SerializedName("default")
private final String someOtherNameThanDefault;
Ответ 2
Просто скажите это из моего личного опыта, @Key может не работать над сериализацией/де-сериализацией при выборе неправильного парсера Json.
(1) Когда вы используете парсер Gson, как показано ниже:
GsonBuilder gsb = new GsonBuilder();
Gson gson = gsb.create();
OneDriveItem oneDriveItem = gson.fromJson(jasonData1, OneDriveItem.class);
@Key не работает, вы должны использовать @SerializedName для аннотирования имени поля.
(2) Когда вы используете JsonFactory из пакета com.google.api.client.json, как показано ниже:
JacksonFactory jsonFactory=new JacksonFactory();
@Key должен работать.
Ответ 3
Если вы используете аннотацию @Key для ваших сопоставленных полей, вам просто нужно использовать настраиваемое значение, которое можно передать в эту аннотацию. Итак, выберите юридическое имя для своего поля и назовите его как @Key ( "default" ):
@Key("default")
private String defaultUrl;