GSON中解析JSON时遇到首字母大写的键名问题

3

我之前在REST API中收到的JSON响应如下所示:

例如:

{"id":"1234"}.

我创建了一个POJO类来设置它,如下所示。

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;

public class Example {

    @SerializedName("id")
    @Expose
    private String id;

    /**
     *
     * @return
     * The id
     */
    public String getId() {
        return id;
    }

    /**
     *
     * @param id
     * The id
     */
    public void setId(String id) {
        this.id = id;
    }
}

我正在使用GSON解析,代码如下:
Example response = new Gson().fromJson(jsonResponse, Example .class);

现在,响应已更改为

{"Id":"1234"}

但由于首字母大写,我的整个解析返回了null。

我尝试了很多方法来解决它,但是我无法得到任何解决方案。我只有一些建议,比如

  • 您应该将@SerializedName的名称更改为首字母大写(但我有成千上万的对象)

是否有任何解决方案,使GSON不依赖于键的大小写?


@Nitesh,感谢您的建议,但我需要另一种方法来进行此更改。因为我有成千上万个带有SerializedName的对象。 - Chintan Rathod
@mixel,你不觉得你标记为重复的那个答案是2011年的吗?而这个问题是在2015年提出的。4年的时间足以让一个好的库发生变化。 - Chintan Rathod
你尝试使用过FieldNamingPolicy吗? - Satyen Udeshi
@SatyenUdeshi 不是这样的.. 我怎么能做到呢.. - Chintan Rathod
你能检查一下这个链接吗?https://dev59.com/_GEh5IYBdhLWcg3wvFbY - Satyen Udeshi
显示剩余4条评论
1个回答

3
我认为您可以在Gson Builder中使用FieldNamingPolicy,就像这样:
Gson gson = new GsonBuilder()
                .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
                .create();

我认为在您的情况下,您需要使用LOWER_CASE_WITH_UNDERSCORES或LOWER_CASE_WITH_DASHES,具体取决于您想要使用哪种分隔符。
如果设置了该标志,则会将驼峰形式转换为小写字段名。详见文档 注意:SerializedName注释将覆盖任何字段命名策略,因此您需要小心处理。详见来源

1
我认为UPPER_CAMEL_CASE更适合他的需求。 - mixel
不行.. 在实施你的解决方案后,它无法解决我的UPPER_CAMEL_CASE问题。 - Chintan Rathod
这就是为什么我建议你使用LOWER_CASE_WITH_UNDERSCORES或LOWER_CASE_WITH_DASHES,因为你想把"Id"改成"id",对吧? - Niko Adrianus Yuwono

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接