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,应该就可以了