Ich kann XML aufgrund einer Anforderung in der Spezifikation nicht direkt verwenden, aber ich stimme Ihnen zu. Vielen Dank!
BeachRunnerFred
@BeachRunnerJoe: Welchen Import muss ich schreiben? import net.sf.json.JSONObject;oder import org.json.JSONObject;. Auch welches Glas muss ich einschließen?
Fahim Parkar
1
Hier ist ein Link zu einer Möglichkeit, mit JAXP ohne Abhängigkeiten vorzugehen
bvdb
16
Ich liebe die geschlossenen Fragen von SO, die eine so hohe Sichtbarkeit haben ... Irgendwo ist etwas schiefgegangen, wenn eine so nützliche Frage geschlossen wurde.
Dariusz
2
Ich denke, 90% der nützlichsten Fragen sind "Abgeschlossenes Thema". smh
Jeryl Cook
Antworten:
188
JSON in Java verfügt über einige großartige Ressourcen.
Warnung: Das Paket json.org.XML ist in Android nicht vorhanden!
Ludovic Landry
2
@danieltalsky: Welchen Import muss ich schreiben? import net.sf.json.JSONObject;oder import org.json.JSONObject;. Auch welches Glas muss ich einschließen?
Was ist, wenn Sie eine haben <test attrib="moretest" content="foo">bar</test>?
wchargin
1
HINWEIS: XML.toJSONObject () von org.json konvertiert auch XML-Listen korrekt in JSON-Arrays (im Gegensatz zu Jacksons XmlMapper, der standardmäßig stillschweigend verschluckt wird).
Agoston Horvath
58
Um XML-Dateien in JSON zu konvertieren, müssen Sie die folgende Abhängigkeit berücksichtigen
Verwenden Sie die im Beitrag erwähnte Version von json, wenn Sie mit Java 7 arbeiten, da die neueste Version seltsame Fehler verursacht.
Urug
Wenn Sie eine gültige dtd-Datei für das XML-Snippet haben, können Sie XML mithilfe des Open-Source-Eclipse-Link-Jars problemlos in JSON und JSON in XML konvertieren. Ein detailliertes Beispiel für ein JAVA-Projekt finden Sie hier: cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html
Piyush Chordia
Ich musste das gesamte JSON-Paket in mein Projekt kopieren und das Paket umbenennen. Das Hinzufügen zu gradle warnt vor doppelten Paketen von Android während des Builds.
Codelearner
28
Das einzige Problem mit JSON in Java besteht darin, dass Ihr XML, wenn es ein einzelnes untergeordnetes Element hat, aber ein Array ist, es in ein Objekt anstelle eines Arrays konvertiert. Dies kann zu Problemen führen, wenn Sie dynamisch immer von XML nach JSON konvertieren. Wenn Ihr Beispiel-XML nur ein Element enthält, geben Sie ein Objekt zurück. Wenn es jedoch 2+ enthält, geben Sie ein Array zurück, was bei Benutzern, die das verwenden, zu Analyseproblemen führen kann JSON.
Die XML2JSON- Klasse von Infoscoop bietet die Möglichkeit, Elemente, die Arrays sind, vor der Konvertierung zu kennzeichnen , sodass Arrays ordnungsgemäß zugeordnet werden können, selbst wenn das XML nur ein untergeordnetes Element enthält .
Hier ist ein Beispiel für die Verwendung (in einer etwas anderen Sprache, aber Sie können auch sehen, wie Arrays mithilfe der nodelist2json () -Methode des XML2JSON-Links verwendet werden).
Wir verwenden eine "xml-to-json" -Bibliothek in Python und dies ist ein semantisches Problem. Um dieses "Array- oder Objekt" -Problem zu lösen, schreiben wir eine "tryConvertToArray ()" - Methode, die ein Array mit dem einzelnen Objekt zurückgibt. Sie können also immer darauf vertrauen, dass Ihr Wert ein Array ist
kommradHomer
Mir ist nicht klar, wie das das Problem löst. Machen Sie dann einfach alles zu einem Array anstelle eines Objekts? ZB, wenn ich das XML habe <results><result><value>1</value></result></results>, würde es erzeugen { "results" : { "result" : { "value" : "1" } } } oder { "results" : [ { "result" : { "value" : "1" } } ] }
Marcus
Wir erwarten, dass es sich um ein Array handelt. Das Problem tritt auf, wenn dieses Array nur 1 Element enthält und somit ein Objekt für den XML-zu-JSON-Konverter ist. Da wir davon ausgehen, dass dies auch nur für ein einzelnes Element ein Array ist, überprüfen wir es und konvertieren es in ein Array. Dabei stellen wir sicher, dass wir ein Array haben, in dem wir ein Array erwarten.
kommradHomer
Aber wie erwarten Sie, dass ein bestimmtes Element ein Array ist? XML2JSON markiert die Elemente. Es ist nicht klar, wie man erwartet, dass es sich um ein Array handelt, ohne es zu markieren, da man es sonst mit einem einzelnen Element 'Array' nie erfahren würde.
Marcus
Zum Beispiel gibt es ein Element namens "Telefonnummern". Und es gibt 1 oder mehr "Telefonnummern" -Elemente im "Telefonnummern" -Element. Wenn es also nur ein "Telefonnummern" -Element in "Telefonnummern" gibt, erstellt xml2json ein Telefonnummernobjekt, aber ich erstelle ein Telefonnummernarray und füge das Telefonnummernobjekt darin ein.
Ich weiß nicht, was genau Ihr Problem ist, aber wenn Sie XML empfangen und JSON (oder etwas anderes) zurückgeben möchten, können Sie sich auch JAX-B ansehen. Dies ist ein Standard für das Marshalling / Unmarshalling von Java-POJOs in XML und / oder Json. Es gibt mehrere Bibliotheken, die JAX-B implementieren, beispielsweise Apaches CXF.
import net.sf.json.JSONObject;
oderimport org.json.JSONObject;
. Auch welches Glas muss ich einschließen?Antworten:
JSON in Java verfügt über einige großartige Ressourcen.
Maven-Abhängigkeit:
XML.java
ist die Klasse, die Sie suchen:Ausgabe ist:
quelle
import net.sf.json.JSONObject;
oderimport org.json.JSONObject;
. Auch welches Glas muss ich einschließen?<test attrib="moretest" content="foo">bar</test>
?Um XML-Dateien in JSON zu konvertieren, müssen Sie die folgende Abhängigkeit berücksichtigen
und Sie können Jar aus dem Maven Repository hier herunterladen . Dann implementieren Sie als:
quelle
Das einzige Problem mit JSON in Java besteht darin, dass Ihr XML, wenn es ein einzelnes untergeordnetes Element hat, aber ein Array ist, es in ein Objekt anstelle eines Arrays konvertiert. Dies kann zu Problemen führen, wenn Sie dynamisch immer von XML nach JSON konvertieren. Wenn Ihr Beispiel-XML nur ein Element enthält, geben Sie ein Objekt zurück. Wenn es jedoch 2+ enthält, geben Sie ein Array zurück, was bei Benutzern, die das verwenden, zu Analyseproblemen führen kann JSON.
Die XML2JSON- Klasse von Infoscoop bietet die Möglichkeit, Elemente, die Arrays sind, vor der Konvertierung zu kennzeichnen , sodass Arrays ordnungsgemäß zugeordnet werden können, selbst wenn das XML nur ein untergeordnetes Element enthält .
Hier ist ein Beispiel für die Verwendung (in einer etwas anderen Sprache, aber Sie können auch sehen, wie Arrays mithilfe der nodelist2json () -Methode des XML2JSON-Links verwendet werden).
quelle
<results><result><value>1</value></result></results>
, würde es erzeugen{ "results" : { "result" : { "value" : "1" } } }
oder{ "results" : [ { "result" : { "value" : "1" } } ] }
Ich habe das Projekt hochgeladen, das Sie direkt in Eclipse öffnen und ausführen können. Das ist alles https://github.com/pareshmutha/XMLToJsonConverterUsingJAVA
Danke
quelle
Ich fand das schnell und einfach: Verwendet:
org.json.XML
Klasse von java-json.jarquelle
Ich weiß nicht, was genau Ihr Problem ist, aber wenn Sie XML empfangen und JSON (oder etwas anderes) zurückgeben möchten, können Sie sich auch JAX-B ansehen. Dies ist ein Standard für das Marshalling / Unmarshalling von Java-POJOs in XML und / oder Json. Es gibt mehrere Bibliotheken, die JAX-B implementieren, beispielsweise Apaches CXF.
quelle