2016-03-02 1 views
1

J'ai le json suivant du serveur. C'est un tableau json avec différents objets. Je veux identifier les objets utilisateur basés sur la clé "type" et les ajouter à un utilisateur hashmap et récupérer l'utilisateur pour afficher des informations dans ma vue contenant l'objet "payments". J'utilise gson et retrofit. TIAParse Json objets avec différents types en utilisant 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" 
     } 
     }] 

Mes cours sont

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; 
     } 
    } 
} 

et

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

par le tableau 'included' et l'ajouter à votre utilisateur hashmap. tout comme @NoChinDeluxe, mais utilisez maintenant le tableau de classe gson. – Bharatesh

+0

Dans l'objet JSON dans les premiers attributs d'objet sont différents par rapport aux deuxième et troisième objets dans ce cas, comment vous pouvez récupérer .Dans l'itération, il va trouver des clés différentes. – Harish

Répondre

0

Ceci est assez facile si vous mettez simplement votre réponse JSON dans une chaîne JSONArray. Ensuite, vous pouvez simplement accéder au champ type et tester si c'est users. Comme ceci:

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

Je suis conscient de cette méthode. Mais où dois-je faire si j'utilise Gson comme gson gère la sérialisation des objets? –

+0

Étant donné que la réponse de votre serveur est JSON, vous devez essentiellement l'analyser en utilisant la méthode ci-dessus et extraire les valeurs dont vous avez besoin pour créer vos objets 'ActivityFeedItem' et' UserFeedItem'. Ensuite, vous les sérialiser avec Gson. À moins qu'il y ait quelque chose qui me manque dans ce que vous essayez de faire, auquel cas n'hésitez pas à le signaler. – NoChinDeluxe

0

tout d'abord créer un tableau d'objets de vous JSON en utilisant GSON comme ci-dessous

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

Maintenant, votre activityFeedArray contient tous les feedItems que vous obtenez en JSON. Ensuite, vous pouvez itérer comme vous le feriez dans un tableau et ajouter à hashmap lorsque le type est utilisateur comme dessous-

for(ActivityFeedItem item:activityFeedArray) { 
     if(item.type.equals("users")) { 
     //add to your users HashMap 
     } 
    } 
boucle