开发过程中有些时候需要把xml和json互转,如某钱X接口入参和出参都是xml格式的,十分蛋疼。特写下面工具类,以留用。
需要引用jar:
<!-- https://mvnrepository.com/artifact/de.odysseus.staxon/staxon -->
<dependency>
<groupId>de.odysseus.staxon</groupId>
<artifactId>staxon</artifactId>
<version>1.3</version>
</dependency>
代码如下:
import de.odysseus.staxon.json.JsonXMLConfig; import de.odysseus.staxon.json.JsonXMLConfigBuilder; import de.odysseus.staxon.json.JsonXMLInputFactory; import de.odysseus.staxon.json.JsonXMLOutputFactory; import javax.xml.stream.*; import java.io.StringReader; import java.io.StringWriter; public class XMLUtils { public static String json2xml(String json, boolean pretty) throws Exception { StringReader input = null; StringWriter output = null; XMLEventReader reader = null; XMLEventWriter writer = null; try { input = new StringReader(json); output = new StringWriter(); JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(false) .prettyPrint(pretty) .build(); reader = new JsonXMLInputFactory(config).createXMLEventReader(input); writer = XMLOutputFactory.newInstance().createXMLEventWriter(output); writer.add(reader); } finally { if (reader != null) { reader.close(); } if (writer != null) { writer.close(); } if (output != null) { output.close(); } if (input != null) { input.close(); } } return output.toString(); } public static String json2xml(String json) throws Exception { return json2xml(json, false); } public static String xml2json(String xml, boolean pretty) throws Exception { StringReader input = null; StringWriter output = null; XMLEventReader reader = null; XMLEventWriter writer = null; try { input = new StringReader(xml); output = new StringWriter(); JsonXMLConfig config = new JsonXMLConfigBuilder().autoArray(true) .prettyPrint(pretty) .build(); reader = XMLInputFactory.newInstance().createXMLEventReader(input); writer = new JsonXMLOutputFactory(config).createXMLEventWriter(output); writer.add(reader); } finally { if (reader != null) { reader.close(); } if (writer != null) { writer.close(); } if (output != null) { output.close(); } if (input != null) { input.close(); } } return output.toString(); } public static String xml2json(String xml) throws Exception { return xml2json(xml, false); } }
这个是最佳解决方案。
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
</dependency>
中XML无论是把json转换成xml,还是把xml转换成json,都有bug。不可使用。