2012-06-12 16 views
5

Ich bin sehr neu zu Json und mein Ziel, die JSON-Ausgabe von Java-Bean unten zu erstellen. Wie soll ich mein Java-Objekt strukturieren? Sollte ich MyResult Klasse und Benutzer und Ergebnis als Unterklassen haben? Welche JSON-Bibliothek kann ich dafür verwenden?Json - Java-Objekt zu Json

“MyResult” { 
    “AccountID”: “12345”, 
    "User" { 
     "Name": "blah blah", 
     "Email": “[email protected]”, 
    }, 
    "Result" { 
     "Course": “blah”, 
     "Score": “10.0” 
    } 
} 
+0

Danke für die Antwort. Wenn ich das in Jackson entwerfen sollte, wie sollte mein Java-Objekt aussehen? – user238021

Antwort

9

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" 
     } 
    } 
} 
7

Googles GSON ist ein wirklich schönes json lib. This ist von der vorherigen Verbindung und es umreißt im Grunde einige seiner Funktionalität.

5

jackson ist auch ziemlich schnell und einfach

+0

Danke für die Antwort. Wenn ich das in Jackson entwerfen sollte, wie sollte mein Java-Objekt aussehen? – user238021

1

Obwohl geschlossen verwenden, this SO post können Sie die Unterschiede zwischen Jackson und Gson verstehen helfen. Welche davon "am besten" ist, hängt davon ab, was für dich wichtig ist.

BEARBEITEN: Speziell für Jackson, sieht Ihr Beispiel sehr ähnlich dem Beispiel, das sie für das geben, was sie Full Data Binding nennen, können Sie es here lesen. Übrigens, obwohl die angekündigten 5 Minuten, die benötigt werden, um das Dokument zu lesen, vielleicht ein bisschen kurz sind, gibt es einen vollständigen Überblick über die verschiedenen Möglichkeiten, wie Jackson benutzt werden kann. Sie werden auch bemerken, dass die angegebenen Beispiele keine Anmerkungen verwenden.

1

Oder GSON

Super einfach (keine Getters/settres, keine Anmerkungen oder Konfigurationen erforderlich).

class BagOfPrimitives { 
    private int value1 = 1; 
    private String value2 = "abc"; 
    private transient int value3 = 3; 
} 

BagOfPrimitives obj = new BagOfPrimitives(); 
Gson gson = new Gson(); 
String json = gson.toJson(obj); 

==> json is {"value1":1,"value2":"abc"} 
+0

Ich sehe jetzt, @fvu sagte über das gleiche. sowieso. – ses