7
votes

JSON - désérialisation de l'objet dynamique à l'aide de GSON

Imaginons que j'ai une classe Java du type: xxx

puis j'ai ceci: xxx

Par2 JSON me est donné à partir d'une autre application et je ne sais jamais ce qu'est ce sont les noms de paramètres, car ils sont dynamiques.

Ma question est, de quel type de classe doit Par2 La variable sur MyClass doit être définie sur, de sorte que la variable de chaîne JSON soit correctement désérialisée à mon objet de classe?

Merci


1 commentaires

Êtes-vous attaché à GSON? Votre cas d'utilisation pourrait être traité beaucoup mieux avec un processeur JSON Free Form comme JSON-Simple (. google.com/json-simple ).


4 Réponses :


8
votes

Check out sérialiser et désérialiser générique générique Types du Guide de l'utilisateur GSON:

Type fooType = new TypeToken<Myclass<Foo>>() {}.getType();
gson.fromJson(json, fooType);


1 commentaires

Je ne pense pas que cela aide l'OP. Il ne sait pas quel type l'objet va être avant d'exécuter la désérialisation.



0
votes

Voir la réponse de Kevin Dolan sur cette question: Comment peut-on Je convertis JSON en HASHMAP avec GSON?

Note, ce n'est pas la réponse acceptée et vous devrez probablement le modifier un peu. Mais c'est assez génial.

Alternativement, abandonnez la sécurité de type de votre objet de niveau supérieur et utilisez simplement des hachons et des matrices jusqu'au bout. Moins de modification au code de Dolan de cette façon.


0 commentaires

-5
votes

Ce code: gson gson = nouveau gsonbuilder.create ();

devrait être: xxx

Je pense (si vous analysez un document JSON).


1 commentaires

Votre suggestion est exactement équivalente au code d'origine. Cela ne ferait rien.



-1
votes

Si vous obtenez un nom dynamique à l'intérieur, disons celui-ci:

@Getter
@Setter
class MyFunnyObject {
    Includes Includes;
    class Includes {
        Map<String, Products> Products;
        class Products {
            String CategoryId;
            String Description;
        }
    }
}


0 commentaires