我正在使用google-api-client的youtube json:
{
"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"
}
.
.
.
}
此时我应该在我的parse java类中创建一个名为default的字段名。 已完成此解析与其他字段的工作,问题是,默认是 私有java名称,所以我无法调用变量默认值。
我该如何管理?
答案 0 :(得分:24)
我相信你的答案在于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;
答案 1 :(得分:2)
根据我的个人经验说,@ Key可能无法在选择错误的Json解析器时进行序列化/反序列化。
(1)当你使用Gson解析器时,如下所示:
GsonBuilder gsb = new GsonBuilder();
Gson gson = gsb.create();
OneDriveItem oneDriveItem = gson.fromJson(jasonData1, OneDriveItem.class);
@Key不起作用,您应该使用@SerializedName来注释字段名称。
(2)当您使用com.google.api.client.json包中的JsonFactory时,如下所示:
JacksonFactory jsonFactory=new JacksonFactory();
@Key应该有效。
答案 2 :(得分:1)
如果您正在为映射字段使用@Key批注,则只需要使用可以传递给此批注的自定义值。因此,为您的字段选择合法名称并将其映射为@Key(“default”):
@Key("default")
private String defaultUrl;