2015-05-01 3 views
0

(Я новичок в Gson и Json поэтому, пожалуйста, простите меня, если это глупый вопрос)Gson преобразовать из JSON в Java объект

Вот response от моего POST запроса:

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 парами ключ/значение.

Так что я попытался с помощью 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 это должно работает

Смежные вопросы