java有没有办法创建以键为大写的JSON对象?
项目:使用REST web服务的Android应用程序
使用:
客户端截击
服务器API-泽西岛
转换器:Gson
这是我第一次在这里问一个问题,我将提供我的方式来“规避”这个代码约定。由于我正在从事一个项目,其中POJO字段已经被定义为大写(遗憾的是,我无法改变这一点),因此我必须找到一种方法来修复JSON字符串,并将其转换为大写POJO的实例
因此基本上是:客户POJO<--&燃气轮机;转换为/来自gson的json对象<--&燃气轮机;服务器POJO
那么,假设我在Users.class
中有一个字段
String USERNAME;
当Jersey通过@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()
需要字符串(而不是JSONObject)作为类之外的参数,所以我设法用这种方式解决了这个问题
所以,我的问题是:有没有什么优雅的方法可以让JSON忽略代码约定并创建一个具有精确字段的JSON对象?在这种情况下:
{"USERNAME": "random_name"}
# 1 楼答案
只需使用注释
com.google.gson.annotations.SerializedName
外接程序类Users.java
:# 2 楼答案
Jersey在内部使用JAXB将bean打包成xml/json。因此,您可以始终使用
@XmlElement
注释并使用name属性来设置要用于编组的属性名称