2013-11-14 9 views
33

Sono nuovo di JSON. Sto avendo un programma per generare xml dall'oggetto json.Conversione da JSON a 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); 

l'output è:

<?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> 

il mio più grande problema è come scrivere i miei attributi invece di json_type = "numero" e anche scrivere i miei propri elementi secondari come.

+0

vinod, hai la soluzione per la domanda di cui sopra, "Scrivere i propri attributi ai tag XML generati da JSON".? Sto anche cercando la soluzione, se l'hai trovata, per favore pubblica questo in questa discussione. Grazie in anticipo. – Malleswari

risposta

71

Utilizzare la (eccellente) libreria JSON-Java da json.org poi

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

toString può prendere un secondo argomento per fornire il nome del nodo principale XML.

Questa libreria è anche in grado di convertire XML per JSON utilizzando XML.toJSONObject(java.lang.String string)

Controllare il Javadoc

Link alla the github repository

POM

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

post originale aggiornato con nuovi collegamenti

+1

grazie per questo. come scrivere json object per aggiungere attrubute a elementi come vinod

+0

Suppongo che l'unico modo sarà di deserializzare il JSON in un oggetto Java (personalizzato). Quindi, usando un framework come XMLBeans o XStream e con l'aiuto delle annotazioni, specifica quale proprietà va come elemento e che va come attributo –

+0

In alternativa, usa l'XML dalle semplici due righe sopra e applica un XSLT ad esso –

3

Se si dispone di un file dtd valido per l'xml, è possibile trasformare facilmente json in xml e xml in json utilizzando il binario di eclipselink jar.

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

L'articolo ha anche un progetto di esempio (compresi i vasetti di supporto di terze parti) come un file zip che può essere scaricato a scopo di riferimento.

0

Se si desidera sostituire qualsiasi valore del nodo che si può fare in questo modo

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

Trasformare con XSLT 3.0 è l'unico modo corretto di farlo, per quanto posso dire. È garantito per produrre XML valido e una struttura piacevole a quello. https://www.w3.org/TR/xslt/#json

0

C'è la libreria underscore-lodash con metodi statici da Json e toXml.

Codice esempio:

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))); 
    } 
}