Converter o JSON para XML em Java

Sou novo no json. Estou a ter um programa para gerar xml a partir do objecto json.

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

a saída é:

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

O meu maior problema é como escrever os meus próprios atributos em vez de json_type="número" e também escrever os meus próprios sub-elementos como .

Author: Bruno Grieder, 2013-11-14

5 answers

Utilize a (excelente) biblioteca JSON-Java de json.org então

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

toString pode ter um segundo argumento para fornecer o nome do nó raiz XML.

Esta biblioteca também é capaz de converter XML para JSON usando XML.toJSONObject(java.lang.String string)

Verifica o Javadoc

Ligação ao repositório de github

POM

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

publicação original actualizada com novas ligações

 83
Author: Bruno Grieder, 2016-03-21 11:34:03

Se tiver um ficheiro dtd válido para o xml, poderá facilmente transformar o json em xml e o xml em json, usando a binária eclipselink jar.

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

O artigo também tem um projecto de amostra (incluindo os frascos de terceiros de apoio) como um ficheiro zip que pode ser descarregado para efeitos de referência.

 4
Author: Piyush Chordia, 2016-05-12 08:53:00

Se quiser substituir qualquer valor de nó que possa fazer como este

JSONObject json = new JSONObject(str);
String xml = XML.toString(json);
xml.replace("old value", "new value");
 0
Author: Saurabh, 2017-07-02 11:53:19
A transformação com o XSLT 3.0 é a única forma correcta de o fazer, tanto quanto sei. É garantido produzir XML válido, e uma boa estrutura para isso. https://www.w3.org/TR/xslt/#json
 0
Author: Martynas Jusevičius, 2017-12-08 14:37:46

Existe a biblioteca undercore-java com o método estático U. jsonToXml(jsonstring). Sou o responsável pelo projecto. Exemplo vivo

Exemplo de código:

import com.github.underscore.lodash.U;

public class MyClass {
    public static void main(String args[]) {
        String json = "{\"name\":\"JSON\",\"integer\":1,\"double\":2.0,\"boolean\":true,\"nested\":{\"id\":42},\"array\":[1,2,3]}";  
        System.out.println(json); 
        String xml = U.jsonToXml(json);  
        System.out.println(xml); 
    }
}
 0
Author: Valentyn Kolesnikov, 2018-10-03 21:34:16