2013-08-30 7 views
0

Cet objet json peut être très très gros parfois, je voudrais l'analyser avec GSON mais je ne comprends pas vraiment comment le format de mes objets java devrait être pour les analyser. Ce qui m'aiderait vraiment, ce serait vraiment des exemples très contextuels, étant donné cet objet, comment formerais-je mes objets modèles java pour contenir les données dans une méthode gson.fromJSON? Mes objets actuels se remplissent de « null »parse/sérialiser un objet json complexe avec GSON

J'explique la simplicité de l'objet au fond

{ 
    response: { 
    user_is_following: 0, 
    name: "Tennesee", 
    submitted_requests: 429, 
    completed_requests: 34, 
    request_types: { 
     c_id: 1064, 
     request_types: [ 
      { 
       objectKey: { 
        id: 15699, 
        name: "Complaint", 
        has_custom_fields: 0, 
        disable_title: 0, 
        disable_description: 0, 
        force_private: 0, 
        image: null 
       } 
      }, 
      { 
       objectKey: { 
        id: 15700, 
        name: "Compliment", 
        has_custom_fields: 0, 
        category_id: 605, 
        disable_title: 0, 
        disable_description: 0, 
        force_private: 0, 
        image: null 
       } 
      }, 
      { 
       objectKey: { 
        id: 17574, 
        name: "Custom Fields, all of them", 
        has_custom_fields: 1, 
        disable_title: 0, 
        disable_description: 0, 
        force_private: 0, 
        image: null, 
        custom_fields: [ 
         { 
          custom_field: { 
           id: "1663", 
           name: "I'm a text input", 
           description: "I'm a text input description", 
           type: "text", 
           required: 1, 
           is_public: 1, 
           options: [ 

           ] 
          } 
         }, 
         { 
          custom_field: { 
           id: "1664", 
           name: "I'm a text input display only", 
           description: "I'm a text input display only description", 
           type: "display", 
           required: 0, 
           is_public: 0, 
           options: [ 

           ] 
          } 
         }, 
         { 
          custom_field: { 
           id: "1665", 
           name: "I'm a checkbox", 
           description: "I'm a checkbox description", 
           type: "checkbox", 
           required: 0, 
           is_public: 1, 
           options: [ 

           ] 
          } 
         }, 
         { 
          custom_field: { 
           id: "1666", 
           name: "I'm a single select", 
           description: "I'm a single select description", 
           type: "singleselect", 
           required: 1, 
           is_public: 0, 
           options: [ 
            { 
             option: { 
              id: "3751", 
              name: "A 123 [email protected]@#", 
              description: "A 123 [email protected]@# description" 
             } 
            }, 
            { 
             option: { 
              id: "3752", 
              name: "B ", 
              description: "B description" 
             } 
            }, 
            { 
             option: { 
              id: "3753", 
              name: "C", 
              description: "C description" 
             } 
            }, 
            { 
             option: { 
              id: "3754", 
              name: " D", 
              description: "D description" 
             } 
            } 
           ] 
          } 
         }, 

        } 
       ], 
       s_types: [ 

       ], 
       categories: [ 
        { 
         category: { 
          id: 618, 
          client: 1064, 
          name: "Abc", 
          gov_creator: 1841, 
          description: "", 
          parent: 607, 
          date_created: 1368137256, 
          image: null 
         } 
        }, 
        { 
         category: { 
          id: 602, 
          client: 1064, 
          name: "Animal Control", 
          gov_creator: 2275, 
          description: "", 
          parent: null, 
          date_created: 1367878768, 
          image: null 
         } 
        }, 

       } 
      ], 
      assets: [ 

      ], 
      benchmark: 0.36078095436096 
     }, 
     status: { 
      type: "success", 
      message: "Success", 
      code: 200, 
      code_message: "Ok" 
     } 
    } 
} 

La vraie viande est la clé request_types, le second, qui est un JSONArray. Chaque index contient un objet, chaque objet peut contenir une clé Custom Fields qui est également un tableau json, qui dans certains cas peut contenir un tableau json options.

J'ai des modèles pour tous ceux-ci, pour un paradigme d'analyse différent, mais pas pour GSON. Je vais devoir utiliser GSON maintenant en raison de limitations de mémoire

Répondre

2

Vous aurez besoin de dire la classe A avec une instance de classe B.

public class A { 
    private B response; 
} 

alors vous aurez besoin de classe B d'avoir une instance de la classe C

public class B { 
    private C request_types; 
} 

Alors C serait contient int c_id et tableau d'une classe D et une classe pour chacun des autres tableaux aussi bien. Alors la classe D contiendrait un seul objet pour la classe E appelé objectKey. La classe E contiendrait tous les champs sous objectKey ...

Donc sur et ainsi de suite ... vous avez raison le JSON est alambiquée.

+0

intéressant, et finalement comment pourrais-je lire ceci dans GSON avec un flux d'entrée? Je vais soit lire ceci à partir d'un fichier ou d'une requête http, les deux retourneront avec un flux d'entrée. – CQM

+0

Voilà comment vous structurer votre haricot. Lorsque vous téléchargez le fichier json, vous appelez 'A myObj = gson.fromJson (lecteur, A.class);' tout devrait être couvert dans les [exemples GSON] (http://www.javacreed.com/simple-gson- Exemple/). – Ali

+0

super merci! et IIRC je peux utiliser mes objets existants mais GSON ignorera mes ArrayLists et d'autres variables privées si elles ne correspondent pas aux clés dans le dossier de json correct? – CQM