为什么GSON没有正确解析这些字段? (FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)

时间:2014-02-10 16:56:26

标签: json gson

我有一个JSONArray的JSONObjects,我试图用GSON解析。我正在使用FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES。它正在为大多数字段正确解析(因此FieldNamingPolicy设置正确),但我收到了null

{
      "image_sq_48x48_url": "url1",
      "image_sq_64x64_url": "url2",
      "image_sq_96x96_url": "url3"
}

带字段名称

imageSq48x48Url
imageSq64x64Url
imageSq96x96Url

也许更好的问题是什么是正确的camelCase?我也试过

imageSq48X48Url
imageSq48X48url

如果我使用@SerializedName("image_sq_96x96_url")进行映射,则会正确解析/填充。

1 个答案:

答案 0 :(得分:1)

不幸的是,JSON中的那些字段名不符合Gson使用该策略所寻求的内容。

如果您创建POJO并将其序列化,您可以看到问题所在:

class MyPojo 
{
    String imageSq48x48Url = "hi";
}

Gson使用该策略生成的JSON是:

{"image_sq48x48_url":"hi"}

它没有考虑/查看数字作为领先指标/"字"的开头。

如果您将字段重命名为:

String imageSq_48x48Url;

它适用于您的JSON示例和该策略。

基本上,您需要创建自己的实现FieldNamingStrategy的类,该类将按照您希望的方式处理这些JSON字段名,或者执行您使用@SerializedName注释执行的操作。