Jackson json-parser setter zu übernehmen Wert als string-array
Habe ich unten 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\"}]";
Bin ich mit dem jackson-parser, um eine Karte zu einer Klasse:
Möchte ich filmname und filmname auf Karte in die Name-Eigenschaft in der java-Klasse. Also schrieb ich die unten Klasse:
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;
}
}
In meiner realen json-es gibt so viele Felder, wie filmname, movieTitle, die ich will, zu normalisieren, zu einem gemeinsamen Namen.
Gibt es eine einfache syntax wie die unten, um code-Duplizierung:
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;
}
}
}
Den obigen code gab mir Fehler auf jsonSetter:
Type mismatch: cannot convert from String[] to String.
BEARBEITEN
Wenn Jackson es nicht unterstützt, kann GSON diesen Vorgang Unterstützen.
Dank
Ihre Frage ist nicht ganz klar... willst du eine Liste von Objekten
Haben Sie versucht, indem Sie mehrere Anmerkungen zu setName, eine für filmname und eine für filmname? Ansonsten die folgende Lösung mit @JsonAnySetter arbeiten.
ja, ich möchte eine Liste von Objekten, die Film mit einem Attribut name, welches den Wert von movie-name-oder Film-Titel. Ja, wenn ein Film den Namen hat ein vlaue dann Film-Titel leer ist.
Movie
mit einem Attribut name
enthält den Wert entweder "movieName"
oder "movieTitle"
? Und wenn, sagen wir mal, "movieName"
einen Wert hat, ist "movieTitle"
werden immer emtpty?Haben Sie versucht, indem Sie mehrere Anmerkungen zu setName, eine für filmname und eine für filmname? Ansonsten die folgende Lösung mit @JsonAnySetter arbeiten.
ja, ich möchte eine Liste von Objekten, die Film mit einem Attribut name, welches den Wert von movie-name-oder Film-Titel. Ja, wenn ein Film den Namen hat ein vlaue dann Film-Titel leer ist.
InformationsquelleAutor javaMan | 2013-06-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie
@JsonAnySetter
, was es bedeutet finden Sie auf Jackson Core (Data-Binding) Anmerkungen Seite.Habe ich erstellt einfache bean, die bezogen auf dein Beispiel:
Wenn ich jetzt Deserialisieren Ihre JSON, in dieser Weise:
Als Ergebnis sehe ich:
InformationsquelleAutor Michał Ziober
Nicht so viel. es ist sehr einfach mit Gson
Klasse erstellen, die für die einzelnen set-Aufzeichnung
wie
Bitte unterlassen Sie es, die Leute zu Fragen abstimmen/annehmen, Ihre Antworten. dieser meta-post für weitere Informationen. Danke!
InformationsquelleAutor Ingreatway
Erklären Sie das Feld wie
@JsonProperty String[] data
und verwenden
Also diese option Jackson Teil sowohl "foo":"bar" und "foo": ["a", "b", "c"].
Alles, was Sie tun müssen, um die merge-string-array wieder in einen string mit der rechten Linie Separatoren. Ich mache es über Guave
data == null ? null : Jointer.on("\n").join(data)
InformationsquelleAutor Eugene Petrenko