Nota: Sono in vantaggio EclipseLink JAXB (MOXy) e un membro del gruppo di esperti JAXB (JSR-222).
Come dovrei strutturare il mio oggetto Java?
Di seguito è possibile visualizzare il modello dell'oggetto. Il binding JSON di MOXy sfrutta le annotazioni JAXB per mappare il modello di dominio a JSON, quindi ho incluso anche quelle. Le implementazioni JAXB hanno regole predefinite per la mappatura dei nomi di campi/proprietà, ma poiché il documento differisce da quello predefinito, ogni campo doveva essere annotato.
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;
}
utente
package forum11001458;
import javax.xml.bind.annotation.XmlElement;
public class User {
@XmlElement(name="Name")
private String name;
@XmlElement(name="Email")
private String email;
}
Risultato
package forum11001458;
import javax.xml.bind.annotation.XmlElement;
public class Result {
@XmlElement(name="Course")
private String course;
@XmlElement(name="Score")
private String score;
}
Quale libreria Json posso utilizzare per questo?
Qui di seguito è come è possibile utilizzare Moxy per fare il binding JSON:
JAXB.proprietà
Per utilizzare moxy come provider JAXB è necessario includere un file chiamato jaxb.properties
con la seguente voce nello stesso pacchetto come il modello di dominio:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
Demo
Si noti come L'associazione JSON di MOXy non richiede alcuna dipendenza dal tempo di compilazione. Tutte le API necessarie sono disponibili in Java SE 6. È possibile aggiungere le API di supporto necessarie se si utilizza 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"
}
}
}
Grazie per la risposta. Se dovessi progettare questo in Jackson, come dovrebbe essere il mio oggetto Java? – user238021