【发布时间】: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"}
【问题讨论】: