Jackson parser json setter pour prendre de la valeur en tant que tableau de chaînes
J'ai ci-dessous json:
"[{\"movieName\":\"A\",\"Leadactor\":\"\",\"leadActress\":\"\",\"movieTitle\":\"\",\"hero\":\"\",\"heroine\":\"\",\"source\":\"IMDB\"}," +
"{\"movieName\":\"\",\"Leadactor\":\"\",\"leadActress\":\"\",\"movieTitle\":\"B\",\"hero\":\"B1\",\"heroine\":\"B2\",\"source\":\"Netflix\"}," +
"{\"movieName\":\"C\",\"Leadactor\":\"C1\",\"leadActress\":\"C2\",\"movieTitle\":\"\",\"hero\":\"\",\"heroine\":\"\",\"source\":\"IMDB\"}," +
"{\"movieName\":\"D\",\"Leadactor\":\"D1\",\"leadActress\":\"D2\",\"movieTitle\":\"\",\"hero\":\"\",\"heroine\":\"\",\"source\":\"IMDB\"}," +
"{\"movieName\":\"\",\"Leadactor\":\"\",\"leadActress\":\"\",\"movieTitle\":\"E\",\"hero\":\"E1\",\"heroine\":\"E2\",\"source\":\"Netflix\"}]";
Je suis à l'aide de jackson analyseur de la carte à une classe:
Je veux movieName et movieTitle à la carte dans le Nom de la propriété dans la classe java. J'ai donc écrit au-dessous de la classe:
public static class MovieData {
@JsonProperty("Name")
private String name;
@JsonSetter({"movieName"})
private void setMovieName(final String name) {
if((name != null) && (! name.equals(""))) {
setNameInternal(name);
}
}
@JsonSetter("movieTitle")
private void setMovieTitle(final String name) {
if((name != null) && (! name.equals(""))) {
setNameInternal(name);
}
}
private void setNameInternal(final String name) {
this.name = name;
}
}
Dans ma vraie json il ya tellement de nombreux domaines comme la movieName, movieTitle qui je veux normaliser dans un nom commun.
Est-il une syntaxe simple comme ci-dessous qui permet de réduire la duplication de code:
public static class MovieData {
@JsonProperty("Name")
private String name;
@JsonSetter(value = { "movieName", "movieTitle" })
private void setName(final String name) {
if((name != null) && (! name.equals(""))) {
this.name=name;
}
}
}
Le code ci-dessus me donne erreur sur jsonSetter:
Type mismatch: cannot convert from String[] to String.
MODIFIER
Si Jackson ne le supporte pas, peut GSON en charge cette opération.
Grâce
Votre question n'est pas très clair... voulez-vous une liste d'objets
Avez-vous essayé d'ajouter de multiples annotations à setName, un pour movieName et un pour movieTitle? Sinon, la solution ci-dessous avec @JsonAnySetter fonctionne.
oui je veux une liste d'objets de Cinéma avec un nom d'attribut, qui contient la valeur de nom de film ou un titre de film. Oui si le nom du film a un vlaue puis titre du film est vide.
Movie
avec un attribut name
, qui contient la valeur de "movieName"
ou "movieTitle"
? Et si, disons, "movieName"
a une valeur, "movieTitle"
sera toujours emtpty?Avez-vous essayé d'ajouter de multiples annotations à setName, un pour movieName et un pour movieTitle? Sinon, la solution ci-dessous avec @JsonAnySetter fonctionne.
oui je veux une liste d'objets de Cinéma avec un nom d'attribut, qui contient la valeur de nom de film ou un titre de film. Oui si le nom du film a un vlaue puis titre du film est vide.
OriginalL'auteur javaMan | 2013-06-04
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
@JsonAnySetter
, ce que c'est un moyen que vous pouvez trouver sur Jackson De Base (Liaison De Données) Les Annotations page.J'ai créé simple haricot qui est lié à votre exemple:
Maintenant, quand je désérialiser votre JSON de cette façon:
Comme résultat que je peux voir:
OriginalL'auteur Michał Ziober
Ne pas faire beaucoup plus. c'est très simple avec Gson
créer une classe pour votre ensemble unique d'enregistrement
comme
Veuillez vous abstenir de demander aux gens de voter et/ou accepter vos réponses. Voir cette méta post pour plus d'information. Merci!
OriginalL'auteur Ingreatway
Vous déclarer le terrain comme
@JsonProperty String[] data
et l'utilisation
Si cette option Jackson partie à la fois "foo":"bar" et "foo": ["a", "b", "c"].
Tout ce que vous devez faire est de fusionner tableau de chaîne de retour sur la chaîne avec le bouton droit de la ligne de séparation. Je le fais via la Goyave
data == null ? null : Jointer.on("\n").join(data)
OriginalL'auteur Eugene Petrenko