本文主要是介绍Java实现XML与JSON的互相转换详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《Java实现XML与JSON的互相转换详解》这篇文章主要为大家详细介绍了如何使用Java实现XML与JSON的互相转换,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下...
1. XML转JSON
1.1 代码目的
实现xml与json的互相转换,先实现xml -> json, 然后实现json -> xml字符串,最后xml字符串 -> 写入文件
XML结构时常会转换为JSON数据结构,感恩开源,有json的开源包帮忙解决问题。
1.2 代码实现
下面代码是xml转json的快速方法
public static String xmlToJson() throws Exception{ //使用DOM4j SAXReader saxReader = new SAXReader(); //读取文件 Document read = saxReader.read("G:\\IDEAProjects\\JavaStudy\\Mooc\\src\\main\\resources\\score.xml"); //使用json的xml转json方法 JSONObject jsonObject = XML.toJSONObject(read.asXML()); //设置缩进转为字符串 System.out.println(jsonObject.toString(3)); return jsonObject.toString(3); }
测试xml文件如下
<?xml version='1.0' encoding='UTF-8'?> <student> <name>Tom</name> <subject>math</subject> <score>80</score> </student>
输出结果:
{"student":
{
"score": 80,
"subject": "math",
"name": "Tom"
}
}
2. JSON转XML
//json转换成xml public static String jsonToXml(String json){ //输入流 StringReader input = new StringReader(json); //输出流 StringWriter output = new StringWriter(); //构建配置文件 JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(falsphpe).repairingNamespaces(false).build(); try { //xml事件读 // This is the top level interface for parsing XML Events. It provides // the ability to peek at the next event and returns configuration // information through the property interface. // 这是最解析XML事件最顶层的接口,它提供了查看下一个事件并通过属性界面返回配置信息的功能。 XMLEventReader reader = new JsonXMLInputFactory(config).createXMLEventReader(input); //这是编写XML文档的顶级界面。 js //验证XML的形式不需要此接口的实例。 XMLEventWriter writer = XMLOutputFactory.newInstance().createXMLEventWriter(output); //创建一个实例使用默认的缩进和换行 writer = new PrettyXMLEventWriter(writer); //添加整个流到输出流,调用next方法,知道hasnext返回false writer.add(reader); reader.close(); writer.close(); } catch (Exception e) { e.printStackTrace(); } finally { python try { output.close(); input.close(); } catch (IOException e) { e.printStackTrace(); } } //移除头部标签 if (output.toString().length() >= 38) { System.out.println(output.toString().substring(39)); return output.toString().substring(39); } System.out.println(output); return output.toString(); }
传入的json字符串即上xml转json中输出的,json转xml的结果如下:
此时是没有头部,在文中被移除!
<student> <score>80</score> <subject>math</subject> <name>Tom</name> </student>
3. JSON转XML并输出成指定的文件
传入xml字符串,利用DOM4J工具即可输出到指定的文件
public static void writeXmlToFile(String xmlStr) throws Exception{ //将xmlstr转为文件形式 Document document = DocumentHelper.parseText(xmlStr); //设置输出的格式 OutputFormat format = OutputFormat.createPrettyPrint(); //构建输出流 XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("newXml.xml"), format); //不要转义字符 xmlWriter.setEscapeText(false); //写入 xmlWriter.write(document); //关闭流 xmlWriter.close(); }
4. 主要的pom.xml配置如下
如下的依赖就足够了
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20171018</version> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> <dependency> <groupId>de.odysseus.staxon</groupId> <artifactId>staxon</artifactId> <version>1.3</version> </dependency>
5. 整体代码
public class Main { public static void main(String[] args)throws Exception { //将xml转化成json String jsonStr = xmlToJson(); //将json转换成xml String xmlStr = jsonToXml(jsonStr); //将json按照响应格式写入score2.xml writeXmlToFile(xmlStr); } public static String xmlToJson() throws Exception{ //使用DOM4j SAXReader saxReader = new SAXReader(); //读取文件 Document read = saxReader.read("G:\\IDEAProjects\\JavaStudy\\Mooc\\src\\main\\resources\\score.xml"); //使用json的xml转json方法 JSONObject jsonObject = XML.toJSONObject(read.asXML()); //设置缩进转为字符串 System.out.println(jsonObject.toString(3)); return jsonObject.toString(3); } public static void writeXmlToFile(String xmlStr) throws Exception{ //将xmlstr转为文件形式 Document document = DocumentHelper.parseText(xmlStr); //设置输出的格式 OutputFormat format = OutputFormat.createPrettyPrint(); //构建输出流 XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("G:\\IDEAProjects\\JavaStudy\\Mooc\\src\\main\\resources\\score2.xml"), format); //不要转义字符 xmlWriter.setEscapeText(false); //写入 xmlWriter.write(document); //关闭流 xmlWriter.close(); } //json转换成xml public static String jsonToXml(String json){ //输入流 StringReader input = new StringReadewww.chinasem.cnr(json); //输出流 StringWriter output = new StringWriter(); //构建配置文件 JsonXMLConfig config = new JsonXMLConfigBuilder().multiplePI(false).repairingNamespaces(false).build(); try { China编程 //xml事件读 // This is the top level interface for parsing XML Events. It provides // the ability to peek at the next event and returns configuration // information through the property interface. // 这是最解析XML事件最顶层的接口,它提供了查看下一个事件并通过属性界面返回配置信息的功能。 XMLEventReader reader = new JsonXMLInputFactory(config).createXMLEventReader(input); //这是编写XML文档的顶级界面。 //验证XML的形式不需要此接口的实例。 XMLEventWriter writer = XMLOutputFactory.newInstance().createXMLEventWriter(output); //创建一个实例使用默认的缩进和换行 writer = new PrettyXMLEventWriter(writer); //添加整个流到输出流,调用next方法,知道hasnext返回false writer.add(reader); reader.close(); writer.close(); } catch (Exception e) { e.printStackTrace(); } finally { try { output.close(); input.close(); } catch (IOException e) { e.printStackTrace(); } } //移除头部标签 if (output.toString().length() >= 38) { System.out.println(output.toString().substring(39)); return output.toString().substring(39); } System.out.println(output); return output.toString(); } }
到此这篇关于Java实现XML与JSON的互相转换详解的文章就介绍到这了,更多相关Java XML与JSON互转内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于Java实现XML与JSON的互相转换详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!