Hinweis: Ich bin die EclipseLink JAXB (MOXy) Leitung und Mitglied der JAXB (JSR-222) Expertengruppe.
Wie soll ich meine Java-Objekt strukturieren?
Unten sehen Sie, wie Ihr Objektmodell aussehen könnte. Die JSON-Bindung von MOXy nutzt JAXB-Annotationen, um das Domänenmodell auf JSON abzubilden. Daher habe ich auch diese hinzugefügt. JAXB-Implementierungen haben Standardregeln für die Zuordnung von Feld-/Eigenschaftsnamen, aber da sich Ihr Dokument vom Standard unterscheidet, musste jedes Feld mit Anmerkungen versehen werden.
MyResult
package forum11001458;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="MyResult")
public class MyResult {
@XmlElement(name="AccountID")
private String accountID;
@XmlElement(name="User")
private User user;
@XmlElement(name="Result")
private Result result;
}
Benutzer
package forum11001458;
import javax.xml.bind.annotation.XmlElement;
public class User {
@XmlElement(name="Name")
private String name;
@XmlElement(name="Email")
private String email;
}
Ergebnis
package forum11001458;
import javax.xml.bind.annotation.XmlElement;
public class Result {
@XmlElement(name="Course")
private String course;
@XmlElement(name="Score")
private String score;
}
Welche JSON-Bibliothek kann ich dafür verwenden?
Im Folgenden finden Sie, wie Sie moxy verwenden können, die JSON zu tun Bindung:
jaxb.Eigenschaften
moxy als JAXB Provider verwenden Sie eine Datei mit dem Namen enthalten müssen jaxb.properties
mit folgendem Eintrag in dem gleichen Paket als Domain-Modell:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
Demo
Beachten Sie, wie Die JSON-Bindung von MOXy erfordert keine Abhängigkeiten bei der Kompilierung. Alle notwendigen APIs sind in Java SE 6. Sie können die erforderlichen APIs hinzufügen, wenn Sie mit Java SE 5.
package forum11001458;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(MyResult.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
unmarshaller.setProperty("eclipselink.media-type", "application/json");
File json = new File("src/forum11001458/input.json");
Object myResult = unmarshaller.unmarshal(json);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty("eclipselink.media-type", "application/json");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(myResult, System.out);
}
}
input.json/Output
{
"MyResult" : {
"AccountID" : "12345",
"User" : {
"Name" : "blah blah",
"Email" : "[email protected]"
},
"Result" : {
"Course" : "blah",
"Score" : "10.0"
}
}
}
Danke für die Antwort. Wenn ich das in Jackson entwerfen sollte, wie sollte mein Java-Objekt aussehen? – user238021