JSON converteren naar XML in Java

Ik ben nieuw bij json. Ik heb een programma om xml van json-object te genereren.

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

de uitvoer is:

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

mijn grootste probleem is hoe ik mijn eigen attributen moet schrijven in plaats van json_type=”number” en ook mijn eigen subelementen zoals .


Antwoord 1, autoriteit 100%

Gebruik dan de (uitstekende) JSON-Java-bibliotheek van json.org

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

toStringkan een tweede argument gebruiken om de naam van het XML-hoofdknooppunt op te geven.

Deze bibliotheek kan ook XML naar JSON converteren met behulp van XML.toJSONObject(java.lang.String string)

Controleer de Javadoc

Link naar de de github-repository

POM

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

oorspronkelijke post bijgewerkt met nieuwe links


Antwoord 2, autoriteit 5%

Underscore-javabibliotheek heeft statische methode U.jsonToXml(jsonstring). Live voorbeeld

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

Uitvoer:

{"name":"JSON","integer":1,"double":2.0,"boolean":true,"nested":{"id":42},"array":[1,2,3]}
<?xml version="1.0" encoding="UTF-8"?>
<root>
  <name>JSON</name>
  <integer number="true">1</integer>
  <double number="true">2.0</double>
  <boolean boolean="true">true</boolean>
  <nested>
    <id number="true">42</id>
  </nested>
  <array number="true">1</array>
  <array number="true">2</array>
  <array number="true">3</array>
</root>

Antwoord 3, autoriteit 3%

Als u een geldig DTD-bestand voor de XML hebt, kunt u JSON eenvoudig transformeren naar XML en XML naar JSON met behulp van de Eclipselink Jar Binary.

Zie dit: http: / /www.cubicrace.com/2015/06/how-to-convert-xml-to-json-format.html

Het artikel heeft ook een voorbeeldproject (inclusief het ondersteunende pot van derden) als een ZIP-bestand dat kan worden gedownload voor referentiedoelstelling.


Antwoord 4, Autoriteit 2%

Voor JSON to XML Gebruik de volgende Jackson Voorbeeld:

final String str = "{\"name\":\"JSON\",\"integer\":1,\"double\":2.0,\"boolean\":true,\"nested\":{\"id\":42},\"array\":[1,2,3]}";
ObjectMapper jsonMapper = new ObjectMapper();
JsonNode node = jsonMapper.readValue(str, JsonNode.class);
XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.configure(SerializationFeature.INDENT_OUTPUT, true);
        xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_DECLARATION, true);
        xmlMapper.configure(ToXmlGenerator.Feature.WRITE_XML_1_1, true);
StringWriter w = new StringWriter();
xmlMapper.writeValue(w, node);
System.out.println(w.toString());

Afdrukken:

<?xml version='1.1' encoding='UTF-8'?>
<ObjectNode>
  <name>JSON</name>
  <integer>1</integer>
  <double>2.0</double>
  <boolean>true</boolean>
  <nested>
    <id>42</id>
  </nested>
  <array>1</array>
  <array>2</array>
  <array>3</array>
</ObjectNode>

Om het terug te zetten (xml naar json ) Bekijk dit antwoord HTTPS: // Stackoverflow .com / a / 62468955/1485527 .


Antwoord 5

Transformeren met XSLT 3.0 is de enige juiste manier om het te doen, voor zover ik kan vertellen. Het is gegarandeerd om geldige XML te produceren, en een mooie structuur daarom.
https://www.w3.org/tr/xslt/#json


Antwoord 6

Als u een knooppuntwaarde wilt vervangen, kunt u dit leuk vinden

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

Other episodes