2015-05-01 62 views
0

(我很新的GSON和JSON,所以请原谅我,如果这是一个愚蠢的问题)GSON转换从JSON到Java对象

这里是我的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对象中。但显然这是非常繁琐的工作,尤其是在我将得到带有100个键/值对的response的情况下。

所以我试着用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字段为空...

是否有人可以帮忙吗?

这里是我FacebookUser类:

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 
} 
+1

您能不能告诉你FacebookUser类? –

+0

我添加了FacebookUser类 – user2456977

回答

1

你需要精确匹配的名称,你可以使用SerializedName注释

@SerializedName("user_id") String userId; 
+0

啊,所以我在我的FacebookUser类中执行此操作...仅仅是我有一个默认的ctor还是我需要一个需要初始化所有字段的ctor? – user2456977

+0

你不需要声明任何其他的ctor,gson在后面使用反射,你的ctor可以是任何东西。 –

0

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这应该作品