【问题标题】:Is there any way to create JSON object with keys as upper case?有没有办法用大写的键创建 JSON 对象?
【发布时间】:2015-10-28 23:04:49
【问题描述】:

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

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

所以基本上它:客户端 POJO json 对象转换为/从 gson 服务器 POJO

所以,假设我在Users.class 中有一个字段

String USERNAME;

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

{"username": "random_name"}

当它通过gson.fromJSON 从 JSON 转换时,客户端 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"}

【问题讨论】:

    标签: java android json rest


    【解决方案1】:

    Jersey 在内部使用 JAXB 将 bean 编组为 xml/json。所以你总是可以使用@XmlElement注解并使用name属性来设置用于编组的属性名

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

    【讨论】:

      【解决方案2】:

      只需使用注解com.google.gson.annotations.SerializedName 在课堂上添加Users.java

      @SerializedName("username")
      String USERNAME;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-16
        • 1970-01-01
        • 2020-03-04
        • 2012-12-31
        • 2014-09-29
        • 2019-05-25
        相关资源
        最近更新 更多