2013-11-14 17 views
33

Ich bin neu in JSON. Ich habe ein Programm, um XML von Json-Objekt zu generieren.Konvertieren von JSON zu XML in Java

String str = "{'name':'JSON','integer':1,'double':2.0,'boolean':true,'nested':{'id':42},'array':[1,2,3]}"; 
    JSON json = JSONSerializer.toJSON(str); 
    XMLSerializer xmlSerializer = new XMLSerializer(); 
    xmlSerializer.setTypeHintsCompatibility(false); 
    String xml = xmlSerializer.write(json); 
    System.out.println(xml); 

der Ausgang ist:

<?xml version="1.0" encoding="UTF-8"?> 
<o><array json_class="array"><e json_type="number">1</e><e json_type="number">2</e><e json_type="number">3</e></array><boolean json_type="boolean">true</boolean><double json_type="number">2.0</double><integer json_type="number">1</integer><name json_type="string">JSON</name><nested json_class="object"><id json_type="number">42</id></nested></o> 

mein größtes Problem ist, wie meine eigenen Attribute statt json_type = „Zahl“ zu schreiben und auch wie meine eigenen Unterelemente zu schreiben.

+0

vinod, Haben Sie die Lösung für die obige Frage: "Schreiben Sie Ihre eigenen Attribute in XML-Tags aus json erzeugt".? Ich bin auch auf der Suche nach der Lösung, wenn Sie das gefunden haben, bitte posten Sie das in diesem Thread. Danke im Voraus. – Malleswari

Antwort

71

Mit den (sehr gut) JSON-Java-Bibliothek aus json.org dann

JSONObject json = new JSONObject(str); 
String xml = XML.toString(json); 

toString ein zweites Argument kann den Namen der XML Wurzelknoten bereitzustellen.

Diese Bibliothek ist auch in der Lage XML zu JSON konvertieren XML.toJSONObject(java.lang.String string) mit

prüfen Javadoc

Link zur the github repository

POM

<dependency> 
    <groupId>org.json</groupId> 
    <artifactId>json</artifactId> 
    <version>20160212</version> 
</dependency> 

original post aktualisiert mit neue Links

+1

danke dafür. Wie schreibe ich JSON-Objekt zu attrubute hinzufügen Element wie vinod

+0

Ich denke, die einzige Möglichkeit wird die Deserialisierung des JSON zu einem (benutzerdefinierten) Java-Objekt sein. Dann, mit einem Framework wie XMLBeans oder XStream und mit Hilfe von Annotationen, geben Sie an, welche Eigenschaft als Element geht und welche als Attribut –

+0

Alternativ verwenden Sie die XML aus den einfachen zwei Zeilen oben und wenden Sie eine XSLT darauf –

3

Wenn Sie eine gültige dtd-Datei für die XML-Datei haben, können Sie json einfach in xml und xml in json umwandeln, indem Sie die Eclipselink-Jar-Binärdatei verwenden.

Siehe dazu: http://www.cubicrace.com/2015/06/How-to-convert-XML-to-JSON-format.html

Der Artikel hat auch ein Beispielprojekt (einschließlich der Unterstützung Dritten Gläser) als Zip-Datei, die zu Referenzzwecken heruntergeladen werden kann.

0

Wenn Sie einen Knotenwert ersetzen möchten Sie dieses

JSONObject json = new JSONObject(str); 
String xml = XML.toString(json); 
xml.replace("old value", "new value"); 
0

mit XSLT Transformation tun 3.0 ist der einzig richtige Weg, es zu tun, soweit ich das beurteilen kann. Es wird garantiert gültiges XML und eine schöne Struktur erzeugt. https://www.w3.org/TR/xslt/#json

0

Es gibt eine underscore-lodash Bibliothek mit statischen Methoden vonJson und toXml.

Code-Beispiel:

import com.github.underscore.lodash.$; 
import java.util.Map; 
import org.junit.Test; 
import static org.junit.Assert.assertEquals; 

public class StringTest { 

    @SuppressWarnings("unchecked") 
    @Test 
    public void toXmlFromJson() { 
     final String json = "{\n" 
      + " \"root\": {\n" 
      + " \"FirstItem\": \"1\",\n" 
      + " \"SecondItem\": \"2\"\n" 
      + " }\n" 
      + "}"; 
     assertEquals("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n" 
      + " <FirstItem>1</FirstItem>\n <SecondItem>2</SecondItem>\n</root>", 
      $.toXml((Map<String, Object>) $.fromJson(json))); 
    } 
}