La documentation de liaison de données Jackson indique que Jackson prend en charge la désérialisation des «tableaux de tous les types pris en charge», mais je ne peux pas comprendre la syntaxe exacte pour cela.
Pour un seul objet, je ferais ceci:
//json input
{
"id" : "junk",
"stuff" : "things"
}
//Java
MyClass instance = objectMapper.readValue(json, MyClass.class);
Maintenant, pour un tableau, je veux faire ceci:
//json input
[{
"id" : "junk",
"stuff" : "things"
},
{
"id" : "spam",
"stuff" : "eggs"
}]
//Java
List<MyClass> entries = ?
Quelqu'un sait s'il y a une commande magique manquante? Sinon, quelle est la solution?
Réponses:
Créez d'abord un mappeur:
En tant que tableau:
Comme liste:
Une autre façon de spécifier le type de liste:
la source
JsonMappingException: No suitable constructor found for type
ci, cela signifie que vous devez ajouter un constructeur par défaut à votre classe en ajoutant un constructeur privé sans argument qui l'a corrigé pour moi.static
- sinon elles n'ont jamais de constructeur à arg zéro.List<MyClass> myObjects = Arrays.asList(mapper.readValue(json, MyClass[].class))
fonctionne jusqu'à 10 fois plus vite que TypeRefence.De Eugene Tskhovrebov
Cette solution semble être la meilleure pour moi
la source
ResourceNotFoundException
Arrays.asList(Json.fromJson(json.get("fieldName"), MyClass[].class))
List<MyClass> myObjects = Arrays.asList(mapper.treeToValue(jsonNode.get("fieldName"), MyClass[].class))
Pour la mise en œuvre générique:
la source
Créez d'abord une instance d'ObjectReader qui est thread-safe.
Ensuite, utilisez-le:
la source
la source
voici un utilitaire qui permet de transformer json2object ou Object2json, quel que soit votre pojo (entité T)
la source
vous pouvez également créer une classe qui étend
ArrayList
:public static class MyList extends ArrayList<Myclass> {}
puis l'utiliser comme:
la source
Je n'ai pas pu utiliser cette réponse car mon linter n'autorisera pas les lancers non contrôlés.
Voici une alternative que vous pouvez utiliser. Je pense que c'est en fait une solution plus propre.
la source