有没有办法用键作为大写创建JSON对象?

时间:2015-10-28 23:04:50

标签: java android json rest

项目:使用REST网络服务的Android应用程序
使用:
客户 - 排球
服务器API - 泽西岛 转换器:Gson

这是我第一次在这里提问,我将提供“回避”此代码约定的方法。由于我正在开发一个项目,其中POJO字段已被定义为大写(遗憾的是,我无法改变),我必须找到一种方法来修复JSON字符串并将其转换为大写POJO的实例。

基本上它是:客户POJO< - > json对象转换为/来自gson< - >服务器POJO

所以,假设我在Users.class

中有一个字段
String USERNAME;

当Jersey发送via @Produces的实例时,它遵循创建JSON并发送对象的约定

{"username": "random_name"}

当它从JSON通过gson.fromJSON转换时,客户端POJO的实例将获得该字段的空值(显然因为JSONObject中的字段是小写的)。

这是我通过使用解析JSONObject并将每个键放在大写的方法来管理它的方法:

public static String fixJSONObject(JSONObject obj) {
    String jsonString = obj.toString();
    for(int i = 0; i<obj.names().length(); i++){
        try{
      obj.names().getString(i).toUpperCase());
           jsonString=jsonString.replace(obj.names().getString(i),
           obj.names().getString(i).toUpperCase());

        } catch(JSONException e) {
            e.printStackTrace();
        }
    }
    return jsonString;
}

幸运的是,由于gson.fromJSON()需要String(而不是JSONObject)作为Class之外的参数,我设法以这种方式解决问题。

所以,我的问题是:是否有任何优雅的方法使JSON忽略该代码约定并创建具有精确字段的JSON对象?在这种情况下:

 {"USERNAME": "random_name"}

2 个答案:

答案 0 :(得分:2)

Jersey在内部使用JAXB将bean编组为xml / json。因此,您始终可以使用@XmlElement注释并使用name属性来设置用于编组的属性名称

@XmlElement(name="USERNAME")
String USERNAME;

答案 1 :(得分:1)

只需使用注释com.google.gson.annotations.SerializedName 在课程Users.java中添加:

@SerializedName("username")
String USERNAME;