JAVA 实现XML与JSON 相互转换
原文地址https://blog.csdn.net/congcong68/article/details/39029907
在工作中,经常碰到XML转为JSON或者JSON转为XML,在这过程中有时嵌套很多层,容易错误,我把实现的代码分享出来,希望对有用到的人提供借鉴。
1.把XML转为JSON格式
- <span style="font-size:18px;">@SuppressWarnings("rawtypes")
- public static String xmlToJSON(String xml,int jsonType) {
- JSONObject obj = new JSONObject();
- try {
- InputStream is = new ByteArrayInputStream(xml.getBytes("utf-8"));
- SAXBuilder sb = new SAXBuilder();
- Document doc = sb.build(is);
- Element root = doc.getRootElement();
- Map map=iterateElement(root);
- obj.put(root.getName(),map);
- return obj.toString();
- } catch (Exception e) {
- e.printStackTrace();
- return null;
- }
- }
- @SuppressWarnings({ "unchecked", "rawtypes" })
- private static Map iterateElement(Element root) {
- List childrenList = root.getChildren();
- Element element = null;
- Map map = new HashMap();
- List list = null;
- for (int i = 0; i < childrenList.size(); i++) {
- list = new ArrayList();
- element = (Element) childrenList.get(i);
- if(element.getChildren().size()>0){
- if(root.getChildren(element.getName()).size()>1){
- if (map.containsKey(element.getName())) {
- list = (List) map.get(element.getName());
- }
- list.add(iterateElement(element));
- map.put(element.getName(), list);
- }else{
- map.put(element.getName(), iterateElement(element));
- }
- }else {
- if(root.getChildren(element.getName()).size()>1){
- if (map.containsKey(element.getName())) {
- list = (List) map.get(element.getName());
- }
- list.add(element.getTextTrim());
- map.put(element.getName(), list);
- }else{
- map.put(element.getName(), element.getTextTrim());
- }
- }
- }
- return map;
- }
- public static void main(String[] args) throws ParseException
- {
- String xml="<ROOT>"+
- "<Status>00</Status>"+
- "<ErrorMsg></ErrorMsg>"+
- "<Data>"+
- "<Row>"+
- "<PERSONID>35020500200610000000000701355116</PERSONID>"+
- "<XM>吴聪楠</XM><SFZH>350624198908052530</SFZH>"+
- "</Row>"+
- "<Row>"+
- "<PERSONID>35020500200610000000000701355117</PERSONID>"+
- "<XM>吴聪楠2</XM><SFZH>350624198908052531</SFZH>"+
- "</Row>"+
- "</Data>"+
- "</ROOT>";
- String str=Xml2JsonUtil.xmlToJSON(xml,1);
- System.out.println(str);
- }</span>
原来的格式:
<ROOT><Status>00</Status><ErrorMsg></ErrorMsg><Data><Row><PERSONID>35020500200610000000000701355116</PERSONID><XM>吴聪楠</XM><SFZH>350624198908052530</SFZH></Row><Row><PERSONID>35020500200610000000000701355117</PERSONID><XM>吴聪楠2</XM><SFZH>350624198908052530</SFZH></Row></Data></ROOT>
转换完的格式:
<span style="font-size:18px;">{"ROOT":{"Data":{"Row":[{"SFZH":"350624198908052530","XM":"吴聪楠","PERSONID":"35020500200610000000000701355116"},{"SFZH":"350624198908052530","XM":"吴聪楠2","PERSONID":"35020500200610000000000701355117"}]},"Status":"00","ErrorMsg":""}}</span>
2.JSON 转换为XML格式
- <span style="font-size:18px;">public static String JsonToXml(Object json)
- {
- if(json==null){
- return null;
- }else{
- Element elements=new Element("xml");
- getXMLFromObject(json,"xml",elements);
- XMLOutputter xmlOut = new XMLOutputter();
- String res=xmlOut.outputString(elements);
- return res;
- }
- }
- private static void getXMLFromObject(Object obj,String tag,Element parent)
- {
- if(obj==null)
- return;
- Element child;
- String eleStr;
- Object childValue;
- if(obj instanceof JSONObject)
- {
- JSONObject jsonObject=(JSONObject)obj;
- for(Object temp:jsonObject.keySet())
- {
- eleStr=temp.toString();
- childValue=jsonObject.get(temp);
- child=new Element(eleStr);
- if(childValue instanceof JSONArray)
- getXMLFromObject(childValue,eleStr,parent,count);
- else{
- parent.addContent(child);
- getXMLFromObject(childValue,eleStr,child,count);
- }
- }
- }else if(obj instanceof JSONArray){
- JSONArray jsonArray=(JSONArray)obj;
- for(int i=0;i<jsonArray.size();i++)
- {
- childValue=jsonArray.get(i);
- child=new Element(tag);
- parent.addContent(child);
- getXMLFromObject(childValue,tag,child,count);
- }
- }else if(obj instanceof Date){
- SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- parent.setText(sf.format((Date)obj));
- }else{
- parent.setText(obj.toString());
- }
- }
- public static void main(String[] args) throws ParseException
- {
- JSONObject rootObject=new JSONObject();
- JSONArray dataArray=new JSONArray();
- JSONObject dataObject1=new JSONObject();
- dataObject1.put("PERSONID", "35020500200610000000000701355117");
- dataObject1.put("XM", "吴聪楠");
- dataObject1.put("SFZH","350624198908052530");
- dataArray.add(dataObject1);
- JSONObject dataObject2=new JSONObject();
- dataObject2.put("PERSONID", "35020500200610000000000701355116");
- dataObject2.put("XM", "吴聪楠2");
- dataObject2.put("SFZH","350624198908052531");
- dataArray.add(dataObject2);
- JSONObject dataRootObject=new JSONObject();
- dataRootObject.put("Row", dataArray);
- JSONObject dataObject=new JSONObject();
- dataObject.put("Status", "00");
- dataObject.put("ErrorMsg", "");
- dataObject.put("Data",dataRootObject);
- rootObject.put("ROOT", dataObject);
- System.out.println(rootObject.toString());
- System.out.println(JsonToXml(rootObject));
- }</span>
原来的格式:
{"ROOT":{"Status":"00","ErrorMsg":"","Data":{"Row":[{"PERSONID":"35020500200610000000000701355117","XM":"吴聪楠","SFZH":"350624198908052530"},{"PERSONID":"35020500200610000000000701355116","XM":"吴聪楠2","SFZH":"350624198908052531"}]}}}
转换完的格式:
<ROOT><Status>00</Status><ErrorMsg></ErrorMsg><Data><Row><PERSONID>35020500200610000000000701355117</PERSONID><XM>吴聪楠</XM><SFZH>350624198908052530</SFZH></Row><Row><PERSONID>35020500200610000000000701355116</PERSONID><XM>吴聪楠2</XM><SFZH>350624198908052531</SFZH></Row></Data></ROOT>
JAVA 实现XML与JSON 相互转换的更多相关文章
- java下XML与JSON互相转换的Utils类
原文:http://heipark.iteye.com/blog/1394844 需要json-lib-2.1-jdk15.jar和xom-1.2.5.jar,maven pom.xml如下: < ...
- java 中xml转换为json对象
1.前提须要jar包: json-lib-2.4-jdk15.jar 和 xom-1.2.5.jar ,maven 仓库: net.sf.json-lib json-lib 2.4 jdk15 xom ...
- java中Xml、json之间的相互转换
旁白: 最近关于xml与json之间的转换都搞蒙了,这里写一个demo,以后备用. 正题: project格式是: jar包是一个一个检出来的,还算干净了. 代码: 工具类: package exer ...
- Java网络通信——XML和JSON
XML(Extensible Markup Language) 定义:一种可扩展的标记性语言 XML有丰富的编码工具,比如Dom4j.JDom等. JSON(JavaScript Object Not ...
- json相关类库,java对象与json相互转换
有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...
- 将Java对象序列化成JSON和XML格式
1.先定义一个Java对象Person: public class Person { String name; int age; int number; public String getName() ...
- WebService(2)-XML系列之Java和Xml之间相互转换
源代码下载:链接:http://pan.baidu.com/s/1ntL1a7R password: rwp1 本文主要讲述:使用jaxb完毕对象和xml之间的转换 TestJava2xml.java ...
- java XML转JSON格式
标签: XML转Json json 2014-05-20 20:55 6568人阅读 评论(6) 收藏 举报 分类: [J2SE基础](20) 代码如下所示,从这个例子中发现了代码库的重要性,如果 ...
- json:JSONObject包的具体使用(JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包)
1.JSONObject介绍 JSONObject-lib包是一个beans,collections,maps,java arrays和xml和JSON互相转换的包. 2.下载jar包 http:// ...
随机推荐
- Web服务器配置Gzip压缩提升网站性能
前言: HTTP协议上的GZIP编码是一种用来改进WEB应用程序性能的技术.大流量的WEB站点常常使用GZIP压缩技术来让用户感受更快的速度.这一般是指WWW服务器中安装的一个功能,当有人来访问这个服 ...
- 父窗口 和 iframe 互相访问
在父窗口中获取iframe中的元素 1. 格式:window.frames["iframe的name值"].document.getElementByIdx_x("ifr ...
- 【CF799E】Aquarium decoration 线段树
[CF799E]Aquarium decoration 题意:有n个物品,小A和小B各自喜欢其中的某些物品,一件物品可能既被小A喜欢又被小B喜欢,也可能既不被小A喜欢又不被小B喜欢.每个物品都有一个价 ...
- python nose测试框架全面介绍四
四.内部插件介绍 1.Attrib 标记,用于筛选用例 在很多时候,用例可以分不同的等级来运行,在nose中很增加了这个功能,使用attrib将用例进行划分 有两种方式: ef test_big_do ...
- iOS - 原生的CIFilter生成二维码和条形码
使用CIFilter可以不引入任何第三方库,就可以生成想要的二维码和条形码,今天简单的介绍一下使用CIFilter生成二维码和条形码.系统CIFilter生成的二维码和条形码的大小有时并不能满足需求, ...
- CentOS7.5安装Tomcat8
一.tomcat的简介 这是Apache Tomcat Servlet / JSP容器的文档包的顶级入口点 .的Apache Tomcat 8.0版实现了Servlet 3.1和JavaServer ...
- 关于graham扫描法求凸包的小记
1.首先,凸包是啥: 若是在二维平面上,则一般的,给定二维平面上的点集,凸包就是将最外层的点连接起来构成的凸多边型,它能包含点集中所有的点. ───────────────────────────── ...
- NLP-python 自然语言处理01
# -*- coding: utf-8 -*- """ Created on Wed Sep 6 22:21:09 2017 @author: Administrator ...
- Java异常的优势与缺陷,及其处理原则
最近在做一个读取数据库元数据的框架,其中的数据库的检查异常让人印象深刻.try-catch简直让人抓狂,同时作为框架哪些异常时应该抛出来给调用人员,哪些是应该自己处理掉的,抛出来的异常时检查异常还是非 ...
- iOS-深入理解(转载)
RunLoop 是 iOS 和 OS X 开发中非常基础的一个概念,这篇文章将从 CFRunLoop 的源码入手,介绍 RunLoop 的概念以及底层实现原理.之后会介绍一下在 iOS 中,苹果是如何 ...