2015-10-05 57 views
2

解析问题我以前在REST API像下面JSON响应,JSON首字母大写键与GSON

例,

{ “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”}

而且由于大写字母的初始化,我的整个解析都返回给我了。

我尝试了很多事情来解决它,但我无法得到任何解决方案。我只有建议像

  • 你应该初始资本变更@SerializedName的名称(但我有成千上万个对象)

是否有GSON不会依赖于资本或更低的情况下,任何解决方案的关键?

+0

尝试把资本ID在@SerializedName(“ID”),而不是@SerializedName(“ID “) – Nitesh

+0

您可以用'@SerializedName(”Id“)''全局替换所有'@SerializedName(”id“)''。 – mixel

+0

@Nitesh感谢您的建议,但我需要替代做这样的改变。因为我有成千上万的对象SerializedName .. –

回答

2

我认为你可以在你的GSON Builder中使用FieldNamingPolicy这样的:

Gson gson = new GsonBuilder() 
       .setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES) 
       .create(); 

我觉得你的情况,你将需要使用基于您想要使用的分离器LOWER_CASE_WITH_UNDERSCORES或LOWER_CASE_WITH_DASHES。

From the docs如果你设置了这个标志,它将把骆驼封装的表单转换为小写字段名。

编辑:
的SerializedName注释将覆盖任何字段命名策略,所以你必须要小心它 - >source

+0

我认为'UPPER_CAMEL_CASE'是更适合他的需求。 – mixel

+0

没有。在实施您的解决方案后,它无法解决我的UPPER_CAMEL_CASE问题。 –

+0

这就是为什么我建议你使用LOWER_CASE_WITH_UNDERSCORES或LOWER_CASE_WITH_DASHES,因为你想改变“ID”为“ID”权? –