2017-08-18 2 views
2

J'ai json de l'URL. Je dois convertir ce JSON au modèleImpossible de convertir json en modèle

{ 
    "someField": 3, 
    "datesField": ["2017-08-19", 
    "2017-08-20", 
    "2017-08-26", 
    "2018-12-30"] 
} 

Je crée des modèles pour la cartographie

@Data 
@NoArgsConstructor 
private class Response{ 
    @JsonProperty("someField") 
    private int someField; 
    @JsonProperty("datesField") 
    private DatesField datesField; 
} 

@Data 
@NoArgsConstructor 
private class DatesField{ 
    private String[] strings; 
} 

essayer de convertir

ObjectMapper mapper = new ObjectMapper(); 
Dates dates = mapper.readValue(forObject, Response.class); 

J'obtiens l'erreur lorsque vous essayez convert:

Impossible désérialiser l'instance de packeg.DatesField sur START_ARRAY jeton

Répondre

3

Le json attribué est incorrect selon le modèle. Il n'existe aucun tableau de type datesField mais un tableau de chaînes dans l'objet datesField.

Votre objet équivalent JSON est:

{ 
    "someField": 3, 
    "datesField": { 
     "strings":["2017-08-19", 
     "2017-08-20", 
     "2017-08-26", 
     "2018-12-30"] 
    } 
} 

Ou l'inverse, si vous avez besoin d'adapter la réponse JSON, changer votre modèle comme suggéré par @xenteros à:

@Data 
@NoArgsConstructor 
private class Response{ 
    @JsonProperty("someField") 
    private int someField; 
    @JsonProperty("datesField") 
    private String[] datesField; 
} 

en outre, notez que le code java à la carte doit être changé la réponse:

Dates dates = mapper.readValue(forObject, Response.class); 

à

Response response = mapper.readValue(forObject, Response.class); 
+0

Comment puis-je cartographier ce texte? API me renvoie ce texte et j'ai besoin de le mapper au modèle – user5620472

+0

@ user5620472 Mise à jour de la réponse avec les deux approches. S'il vous plaît, jetez un oeil. – nullpointer

0
{ 
    "someField": 3, 
    "datesField": ["2017-08-19", 
    "2017-08-20", 
    "2017-08-26", 
    "2018-12-30"] 
} 

est équivalent à

@Data 
@NoArgsConstructor 
private class Response{ 
    @JsonProperty("someField") 
    private int someField; 
    @JsonProperty("datesField") 
    private String[] datesField; 
} 

Vous devriez plutôt analyser les éléments suivants json:

{ 
    "someField": 3, 
    "datesField": { 
     "strings": 
      ["2017-08-19", 
      "2017-08-20", 
      "2017-08-26", 
      "2018-12-30"] 
     } 
}