2016-03-02 2 views
1

У меня есть следующий json с сервера. Это массив json с разными объектами. Я хочу идентифицировать пользовательские объекты на основе ключа «type» и добавить их в пользовательский hashmap и выбрать пользователя для отображения информации в моем представлении, содержащей объект «платежи». Я использую gson и модифицирую. ТИАОбъекты Parse Json разных типов с использованием gson

"included":[ 
     { 
     "id":"1", 
     "type":"payments", 
     "attributes":{ 
      "amount_cents":100, 
      "amount_currency":"INR", 
      "description":"Test description!!", 
      "created_at":"2016-03-01T11:30:53Z", 
      "status":"paid", 
      "paid_at":null, 
      "charged_at":null, 
      "formatted_amount":"Rs1.00" 
     }, 
     "relationships":{ 
      "sender":{ 
       "data":{ 
        "id":"2", 
        "type":"users" 
       } 
      }, 
      "receiver":{ 
       "data":{ 
        "id":"1", 
        "type":"users" 
       } 
      } 
     } 
     }, 
     { 
     "id":"2", 
     "type":"users", 
     "attributes":{ 
      "first_name":"Rob", 
      "last_name":"Thomas" 
     } 
     }, 
     { 
     "id":"1", 
     "type":"users", 
     "attributes":{ 
      "first_name":"Matt", 
      "last_name":"Thomas" 
     } 
     }] 

Мои классы

public class ActivityFeedItem implements IFeedItem { 
    @SerializedName("id") 
    String id; 

    @SerializedName("type") 
    String type; 

    @SerializedName("attributes") 
    Attributes attributes; 

    protected class Attributes { 
     double amount_cents; 
     String amount_currency; 
     String description; 
     String created_at; 
     String status; 
     String paid_at; 
     String charged_at; 
     String formatted_amount; 

     Relationships relationships; 

     public double getAmount_cents() { 
      return amount_cents; 
     } 

     public String getAmount_currency() { 
      return amount_currency; 
     } 

     public String getDescription() { 
      return description; 
     } 

     public String getCreated_at() { 
      return created_at; 
     } 

     public String getStatus() { 
      return status; 
     } 

     public String getPaid_at() { 
      return paid_at; 
     } 

     public String getCharged_at() { 
      return charged_at; 
     } 

     public String getFormatted_amount() { 
      return formatted_amount; 
     } 

     public Relationships getRelationships() { 
      return relationships; 
     } 
    } 
} 

и

public class UserFeedItem implements IFeedItem { 

    @SerializedName("id") 
    String id; 

    @SerializedName("type") 
    String type; 

    @SerializedName("attributes") 
    Attributes attributes; 


    public class Attributes { 
     @SerializedName("first_name") 
     String first_name; 

     @SerializedName("last_name") 
     String last_name; 
    } 
} 
+0

цикл через массив 'included' и добавить его в свой hashmap пользователя. как @NoChinDeluxe, но теперь используйте массив класса gson. – Bharatesh

+0

В объекте JSON в первых атрибутах объекта разные по сравнению со вторым и третьим объектами в этом случае, как вы можете получить. В итерации он найдет разные ключи. – Harish

ответ

0

Это довольно легко, если вы просто кладете строку ответа JSON в JSONArray. Затем вы можете просто получить поле type и проверить, есть ли оно users. Как это:

JSONArray jsonArray = new JSONArray(yourServerResponseString); 
for(int i=0; i<jsonArray.length(); i++) { 
    JSONObject object = (JSONObject) jsonArray.get(i); 
    String type = object.getString("type"); 
    if(type.equals("users")) { 
     //add to your users HashMap 
    } 
} 
+0

Я знаю об этом методе. Но где это сделать, если я использую Gson, поскольку gson обрабатывает сериализацию объектов? –

+0

Поскольку ваш ответ сервера JSON, вы, по существу, разбираете его с помощью метода выше и извлекаете значения, необходимые для создания объектов 'ActivityFeedItem' и' UserFeedItem'. Затем вы сериализуете их с помощью Gson. Если нет чего-то, чего мне не хватает в том, что вы пытаетесь сделать, и в этом случае не стесняйтесь указать на это. – NoChinDeluxe

0

Прежде всего создать массив объектов из вас JSON с помощью GSON, как показано ниже

Gson gson= new Gson(); 
    String jsonString= yourJsonObject.getString("included"); 
    ActivityFeedItem[] activityFeedArray=gson.fromJson(jsonString,ActivityFeedItem[].class); 

Теперь ваш activityFeedArray содержит все feedItems вы получите в формате JSON. Затем вы можете перебирать его так же, как и в любом массиве, и добавлять к hashmap, когда пользователь типа находится ниже:

for(ActivityFeedItem item:activityFeedArray) { 
     if(item.type.equals("users")) { 
     //add to your users HashMap 
     } 
    } 
Смежные вопросы