Generierung von mehr wie json json von JAXB und Jersey
Arbeite ich mit einem datamodel erstellt mit JAXB aus, die ich erzeugen kann, die XML direkt
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>\
<metadata xmlns="http://musicbrainz.org/ns/mmd-2.0#" xmlns:ext="http://musicbrainz.org/ns/ext#-2.0">
<artist-list offset="0" count="1">
<artist ext:score="100" type="Group" id="4302e264-1cf0-4d1f-aca7-2a6f89e34b36">
<name>Farming Incident</name>
<ipi-list>
<ipi>1001</ipi>
</ipi-list>
</artist>
</artist-list>
</metadata>
und mit Hilfe des Jersey erzeugen, JSon mit Natürlichen notation
"artist-list":
{"offset":0,
"count":1,
"artist":[
{"score":"100",
"type":"Group",
"id":"4302e264-1cf0-4d1faca7-2a6f89e34b36",
"name":"Farming Incident",
"ipi-list":
{
"ipi":[
"1001"
]
}
}]
}
Die Xml ist in Ordnung, die json ist fast einwandfrei außer das da Json direkt unterstützt arrays mit Elementen wie ipi-Liste und Künstler-Liste scheint nicht sehr json, ist es möglich, mehr zu erzeugen wie json json von meinem Modell ?
Zusätzliche Informationen Angefordert
Die json generiert sich aus dieser MMD-schema
http://svn.musicbrainz.org/mmd-schema/trunk/brainz-mmd2-jaxb/src/main/resources/musicbrainz_mmd-2.0.xsd mit JAXB und Jersey ,
sehen
http://svn.musicbrainz.org/search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ResultsWriter.java und
http://svn.musicbrainz.org/search_server/trunk/servlet/src/main/java/org/musicbrainz/search/servlet/mmd2/ArtistWriter.java
Der Punkt ist, dass ich möchte in der Lage sein zum generieren von Json und XML aus einem schema mit dem minimum der Aufregung, aber anscheinend ist der Json nicht richtig Aussehen, so Im der Suche nach einem Weg, um es zu verbessern (ich habe eigentlich gar keine Erfahrung mit json mich)
- Ist Ihr Modell ursprünglich annotierten java-Klassen oder ein JAXB-schema?
- Ihr Ausgang scheint ein wenig seltsam. Konnte Sie zeigen, wie die Klassen versehen sind und wie Sie umwandeln zu XML/JSON?
- Es ist genau das, was Sie haben : für jedes Objekt, das Sie haben, alle seine Eigenschaften und so weiter. Wenn Sie es nicht mögen - machen Sie Ihre eigenen Anmerkungen über den bestehenden JAXB diejenigen zu produzieren benutzerdefinierte JSON-JSON-spezifische Anmerkungen.
- Ich habe aktualisiert die Frage
- Enthält Ihre Anwendung sollte in der Lage sein zu Lesen der JSON-oder ist es nur für Export Zwecke ? Denn wenn das schema unterscheidet sich für die XML-und JSON-dann müssen Sie einige Logik auf Ihr Modell, vor allem für die
count
undoffset
Ihrerartist-list
element. - Nur Ausgang, ich muss in der Lage sein, um die Ausgabe als xml und json. Aber weiß nicht, was die json-Ausgabe Aussehen sollte, noch wie man es so Aussehen.
- Tut
ipi-list
entsprechen einer@XmlElementWrapper
? - Nein, es ist nur ein weiterer XmlElement , aber XmlElementWrapper klingt interessant
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinweis: ich bin der EclipseLink JAXB (MOXy) führen und ein Mitglied der JAXB (JSR-222) expert group.
Könnten Sie nutzen die JSON-Bindung und externen mapping-Dokument in EclipseLink JAXB (MOXy) um Unterstützung für Ihren Fall.
Externen Mapping-Datei (oxml.xml)
Können Sie die
@XmlPath(".")
Erweiterung in MOXy zu glätten, Teile Ihrer Objekt-Modell. Geben Sie einen Pfad von"."
sagt MOXy enthalten die referenzierten Objekts in der übergeordneten Knoten.jaxb.Eigenschaften
Angeben, MOXy, wie Ihr JAXB-provider müssen Sie eine Datei namens
jaxb.properties
im gleichen Paket wie Ihr domain-Modell mit den folgenden Eintrag.Demo
Den code unten füllt das Objekt-Modell von Ihrem XML-Dokument, und klicken Sie dann umgewandelt zu JSON. Es zeigt, wie die Nutzung der externen mapping-Datei und legen Sie MOXy im JSON-Modus.
Ausgabe
MOXy und Jersey
Können Sie problemlos verwenden, MOXy, wie Sie Ihre JSON-Anbieter in einer JAXB-RS Umfeld wie Jersey:
ANDERE DATEIEN
Unten sind die Versionen Ihrer Dateien, die ich erstellt, um sicherzustellen, dass alles ordnungsgemäß funktioniert.
input.xml
Metadaten
ArtistList
Künstler
IPList
Paket-info
MOXyJsonProvider
Klasse dann MOXy verwendet werden, für die JSON-binding und anderen JAXB-provider verwendet werden, die für XML (siehe blog.bdoughan.com/2012/05/...). Da MOXy implementiert, dass JAXB (JSR-222) - Spezifikation, können Sie sicher sein, verwenden Sie es für Ihre XML als gut. FYI WebLogic geschaltet MOXy als Standard JAXB-provider: blog.bdoughan.com/2011/12/...JSON erstellt von Jersey ist eine genaue JSOON Darstellung des Modells auf der Website. Das problem, das Sie konfrontiert sind, ist hier, dass die Website ist die Bereitstellung einer misslichen Daten Modell nicht, dass der Rahmen nicht das richtige zu tun.
Warum funktioniert dieser service Rückgabe ein Objekt vom Typ Künstler-Liste, anstatt eine Liste von Künstlern? Warum kostet der service haben ipi-Liste Objekt auch? Die wirkliche Frage, die Sie sollten sich Fragen sollte, wie sollte diese modelliert werden, besser zu arbeiten mit allen Technologien.
Ich persönlich mag keine Anmerkungen zu viel. Haben Sie eine Gewohnheit der Erzeugung von JSON/XML in plain code. 🙂
Beispielsweise mit Jackson (Gson auch ähnlich):
Kann es sieht eine Menge Arbeit auf der Oberfläche. Aber für mich ist das ganz klar Weg von mapping von JSON-Objekten. Im Grunde haben toJson () - Methode in der entity-Klassen ist meine übliche Praxis. Hier ist ein Beispiel: https://github.com/richardzcode/metrics/blob/master/src/main/java/com/rz/metrics/core/entities
Ist es nur mich aber.
Für JAXB ich glaube, Sie brauchen, um zu kommentieren, Ihre Einheit wie unten:
Ich denke, das problem, dass Sie sehen, mit der ipiList ist bedingt durch ein Problem mit single-element-arrays/Listen in einer zugrunde liegenden Bibliothek, Jersey verwendet für die Zuordnung zu JSON.
Den folgenden blog-post (nicht von mir) zeigt eine Möglichkeit zum konfigurieren von Jersey, und die Kommentare-link durch alternative (evtl. einfachere) Wege, um die JSON-Repräsentation richtige für arrays:
http://tugdualgrall.blogspot.co.uk/2011/09/jax-rs-jersey-and-single-element-arrays.html
Ich es geschafft, zu lösen JSON-Arrays und primitive Feld "Fehler" im Trikot der json-Bibliothek. Geheime Zutat ist previusly erwähnt JSONConfiguration und ContextResolver Magie. Siehe meinen folgenden post es hat ein full-code-Beispiel angepasst ContextResolver und der rest der Application-Klasse könnte etwas fuzzy-Logik im ersten Blick.
Das serialisieren von Java-primitiven mit Jersey REST