pojo用无效的java名称解析gson

时间:2011-01-10 13:15:02

标签: java android json

我正在使用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名称,所以我无法调用变量默认值。

我该如何管理?

3 个答案:

答案 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;