Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

[Jackson] parsing des valeurs Json dans un tableau


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre habitué
    [Jackson] parsing des valeurs Json dans un tableau
    bonjour, voici mon modèle de donnée json
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    {  "data": [   { "num": "01000017DC416B01",  "active": true, "serial": "0610005910", "can_types":[1, 2,3] }, {  "num": "01000017DC416B01",  "active": true, "serial": "0610005910", "can_types":[1, 7,2]} ], "age":"10" }

    je veut récupérer les 3 premières propriétés du tableau (num, active et serial) plus celle en dehors du tableau age (que j'arrive d'ailleurs à récupérer mais pas celle qui sont dans le tableau.
    J'ai créé 2 classes
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class MyFields {
     
        private String num;
     
        private boolean active;
     
        private String serial;
    }
    et
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class MyFieldsWrapper {
     
        private List<MyFields> myFields;
        private int age;
     
        public List<MyFields> getMyFields() {
            return myFields;
        }
     
        public void setMyFields(List<MyFields> myFields) {
            this.myFields = myFields;
        }
    }


    Voici mon main dans lequel ma liste d'objets du tableau json n'est jamais récupérée, la valeur retournée est null je n'arrive pas à savoir pourquoi
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public static void main(String arg []){
     
            String json ="{  \"data\": [ { \"num\": \"01000017DC416B01\",  \"active\": true, \"serial\": \"0610005910\", \"can_types\":[1, 2,3]\n" +
            "}, {  \"num\": \"01000017DC416B01\",  \"active\": true, \"serial\": \"0610005910\", \"can_types\":[1, 7,2] } ], \"age\":\"10\" }";
     
            ObjectMapper mapper = new ObjectMapper();
            MyFieldsWrapper myWrapper = mapper.readValue(json, MyFieldsWrapper.class);
            System.out.println(myWrapper.getAge()); // retourne bien 10
            System.out.println(myWrapper.getMyFields()); // me retourne null pourquoi?
    }

  2. #2
    Membre habitué
    j'ai pu trouver la solution, c'était juste un problème de mapping il fallait ajouter
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    @JsonProperty("data")

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    @Data
    @JsonIgnoreProperties(ignoreUnknown = true)
    public class MyFieldsWrapper {
     
        @JsonProperty("data")
        private List<MyFields> myFields;
        private int age;
     
        public List<MyFields> getMyFields() {
            return myFields;
        }
     
        public void setMyFields(List<MyFields> myFields) {
            this.myFields = myFields;
        }
    }

  3. #3
    Modérateur

    ... ou juste l'appeler "data" au lieu de "myFields", comme avec "age"...

    Enfin d'une manière ou d'une autre, les noms ne sont pas très bons.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre habitué
    Pour les noms ce n'était que des exemples pour des raison de confidentialité, en réalité mon modèle de données n'a aucun nom mentionné dans l'exemple mais la forme de données est la même

###raw>template_hook.ano_emploi###