Gson 从 JSON 转换为 Java 对象
Gson convert from JSON to Java object
(我对 Gson 和 Json 很陌生,所以如果这是一个愚蠢的问题,请原谅我)
这是我的 POST
请求中的 response
:
String getResponse = ({"user_id":"1","device_id":"0","user_name":"jdoe","first_name":"John","last_name":"Doe"});
获得 response
后,我使用以下方法将 JSON
值放入我的 Java
对象中:
FacebookUser facebookUser = new FacebookUser();
JSONObject responseObject = new JSONObject(getResponse);
Iterator<String> iter = responseObject.keys();
while (iter.hasNext()) {
String key = iter.next();
switch (key) {
case "user_id":
try {
Object value = responseObject.get(key);
facebookUser.setUserId((String) value);
} catch (JSONException e) {
Log.d("JsonException", "error" + e.toString());
}
break;
case "device_id":
try {
Object value = responseObject.get(key);
facebookUser.setDeviceId((String) value);
} catch (JSONException e) {
Log.d("JsonException", "error" + e.toString());
}
break;
case "user_name":
try {
Object value = responseObject.get(key);
facebookUser.setUsername((String) value);
} catch (JSONException e) {
Log.d("JsonException", "error" + e.toString());
}
break;
case "first_name":
try {
Object value = responseObject.get(key);
facebookUser.setFirstName((String) value);
} catch (JSONException e) {
Log.d("JsonException", "error" + e.toString());
}
break;
case "last_name":
try {
Object value = responseObject.get(key);
facebookUser.setLastName((String) value);
} catch (JSONException e) {
Log.d("JsonException", "error" + e.toString());
}
break;
}
}
效果很好,所有值都放在我的 FacebookUser
对象中。但显然这是一项非常乏味的工作,尤其是在我会得到一个 response
和 100 key/value 对的情况下。
所以我尝试使用 Gson
一次完成所有工作:
String getResponse = ({"user_id":"1","device_id":"0","user_name":"jdoe","first_name":"John","last_name":"Doe"});
FacebookUser facebookUser = new FacebookUser();
Gson gson = new GsonBuilder()
.disableHtmlEscaping()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.setPrettyPrinting()
.serializeNulls()
.create();
FacebookUser facebookUser = gson.fromJson(getResponse,
FacebookUser.class);
但是,所有 facebookUser
字段都是空的...
有人可以帮忙吗?
这是我的 Facebook 用户 class:
public class FacebookUser implements Serializable{
String userId;
String deviceId;
String username;
String firstName;
String lastName;
public FacebookUser() { //default ctor
}
... a bunch of getters
... a bunch of setters
}
需要准确匹配名字,可以使用SerializedName注解
@SerializedName("user_id") String userId;
Gson 不知道如何找到匹配 json 字段的 属性 因为下划线,你必须解释如何使用 _
`
final GsonBuilder builder = new GsonBuilder();
builder.setDateFormat(DateFormat.LONG);
builder.setPrettyPrinting();
builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
final Gson gson = builder.create();
FacebookUser facebookUser = gson.fromJson(getResponse,FacebookUser.class);
`
有了这个 gson,应该就可以了
(我对 Gson 和 Json 很陌生,所以如果这是一个愚蠢的问题,请原谅我)
这是我的 POST
请求中的 response
:
String getResponse = ({"user_id":"1","device_id":"0","user_name":"jdoe","first_name":"John","last_name":"Doe"});
获得 response
后,我使用以下方法将 JSON
值放入我的 Java
对象中:
FacebookUser facebookUser = new FacebookUser();
JSONObject responseObject = new JSONObject(getResponse);
Iterator<String> iter = responseObject.keys();
while (iter.hasNext()) {
String key = iter.next();
switch (key) {
case "user_id":
try {
Object value = responseObject.get(key);
facebookUser.setUserId((String) value);
} catch (JSONException e) {
Log.d("JsonException", "error" + e.toString());
}
break;
case "device_id":
try {
Object value = responseObject.get(key);
facebookUser.setDeviceId((String) value);
} catch (JSONException e) {
Log.d("JsonException", "error" + e.toString());
}
break;
case "user_name":
try {
Object value = responseObject.get(key);
facebookUser.setUsername((String) value);
} catch (JSONException e) {
Log.d("JsonException", "error" + e.toString());
}
break;
case "first_name":
try {
Object value = responseObject.get(key);
facebookUser.setFirstName((String) value);
} catch (JSONException e) {
Log.d("JsonException", "error" + e.toString());
}
break;
case "last_name":
try {
Object value = responseObject.get(key);
facebookUser.setLastName((String) value);
} catch (JSONException e) {
Log.d("JsonException", "error" + e.toString());
}
break;
}
}
效果很好,所有值都放在我的 FacebookUser
对象中。但显然这是一项非常乏味的工作,尤其是在我会得到一个 response
和 100 key/value 对的情况下。
所以我尝试使用 Gson
一次完成所有工作:
String getResponse = ({"user_id":"1","device_id":"0","user_name":"jdoe","first_name":"John","last_name":"Doe"});
FacebookUser facebookUser = new FacebookUser();
Gson gson = new GsonBuilder()
.disableHtmlEscaping()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE)
.setPrettyPrinting()
.serializeNulls()
.create();
FacebookUser facebookUser = gson.fromJson(getResponse,
FacebookUser.class);
但是,所有 facebookUser
字段都是空的...
有人可以帮忙吗?
这是我的 Facebook 用户 class:
public class FacebookUser implements Serializable{
String userId;
String deviceId;
String username;
String firstName;
String lastName;
public FacebookUser() { //default ctor
}
... a bunch of getters
... a bunch of setters
}
需要准确匹配名字,可以使用SerializedName注解
@SerializedName("user_id") String userId;
Gson 不知道如何找到匹配 json 字段的 属性 因为下划线,你必须解释如何使用 _
`
final GsonBuilder builder = new GsonBuilder();
builder.setDateFormat(DateFormat.LONG);
builder.setPrettyPrinting();
builder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES)
final Gson gson = builder.create();
FacebookUser facebookUser = gson.fromJson(getResponse,FacebookUser.class);
`
有了这个 gson,应该就可以了