原文地址https://blog.csdn.net/congcong68/article/details/39029907

在工作中,经常碰到XML转为JSON或者JSON转为XML,在这过程中有时嵌套很多层,容易错误,我把实现的代码分享出来,希望对有用到的人提供借鉴。

   1.把XML转为JSON格式

  1. <span style="font-size:18px;">@SuppressWarnings("rawtypes")
  2. public static  String xmlToJSON(String xml,int jsonType) {
  3. JSONObject obj = new JSONObject();
  4. try {
  5. InputStream is = new ByteArrayInputStream(xml.getBytes("utf-8"));
  6. SAXBuilder sb = new SAXBuilder();
  7. Document doc = sb.build(is);
  8. Element root = doc.getRootElement();
  9. Map map=iterateElement(root);
  10. obj.put(root.getName(),map);
  11. return obj.toString();
  12. } catch (Exception e) {
  13. e.printStackTrace();
  14. return null;
  15. }
  16. }
  17. @SuppressWarnings({ "unchecked", "rawtypes" })
  18. private static Map  iterateElement(Element root) {
  19. List childrenList = root.getChildren();
  20. Element element = null;
  21. Map map = new HashMap();
  22. List list = null;
  23. for (int i = 0; i < childrenList.size(); i++) {
  24. list = new ArrayList();
  25. element = (Element) childrenList.get(i);
  26. if(element.getChildren().size()>0){
  27. if(root.getChildren(element.getName()).size()>1){
  28. if (map.containsKey(element.getName())) {
  29. list = (List) map.get(element.getName());
  30. }
  31. list.add(iterateElement(element));
  32. map.put(element.getName(), list);
  33. }else{
  34. map.put(element.getName(), iterateElement(element));
  35. }
  36. }else {
  37. if(root.getChildren(element.getName()).size()>1){
  38. if (map.containsKey(element.getName())) {
  39. list = (List) map.get(element.getName());
  40. }
  41. list.add(element.getTextTrim());
  42. map.put(element.getName(), list);
  43. }else{
  44. map.put(element.getName(), element.getTextTrim());
  45. }
  46. }
  47. }
  48. return map;
  49. }
  50. public static void main(String[] args) throws ParseException
  51. {
  52. String xml="<ROOT>"+
  53. "<Status>00</Status>"+
  54. "<ErrorMsg></ErrorMsg>"+
  55. "<Data>"+
  56. "<Row>"+
  57. "<PERSONID>35020500200610000000000701355116</PERSONID>"+
  58. "<XM>吴聪楠</XM><SFZH>350624198908052530</SFZH>"+
  59. "</Row>"+
  60. "<Row>"+
  61. "<PERSONID>35020500200610000000000701355117</PERSONID>"+
  62. "<XM>吴聪楠2</XM><SFZH>350624198908052531</SFZH>"+
  63. "</Row>"+
  64. "</Data>"+
  65. "</ROOT>";
  66. String str=Xml2JsonUtil.xmlToJSON(xml,1);
  67. System.out.println(str);
  68. }</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格式

  1. <span style="font-size:18px;">public static  String JsonToXml(Object json)
  2. {
  3. if(json==null){
  4. return null;
  5. }else{
  6. Element elements=new Element("xml");
  7. getXMLFromObject(json,"xml",elements);
  8. XMLOutputter xmlOut = new XMLOutputter();
  9. String res=xmlOut.outputString(elements);
  10. return res;
  11. }
  12. }
  13. private static void getXMLFromObject(Object obj,String tag,Element parent)
  14. {
  15. if(obj==null)
  16. return;
  17. Element child;
  18. String eleStr;
  19. Object childValue;
  20. if(obj instanceof JSONObject)
  21. {
  22. JSONObject jsonObject=(JSONObject)obj;
  23. for(Object temp:jsonObject.keySet())
  24. {
  25. eleStr=temp.toString();
  26. childValue=jsonObject.get(temp);
  27. child=new Element(eleStr);
  28. if(childValue instanceof JSONArray)
  29. getXMLFromObject(childValue,eleStr,parent,count);
  30. else{
  31. parent.addContent(child);
  32. getXMLFromObject(childValue,eleStr,child,count);
  33. }
  34. }
  35. }else if(obj instanceof JSONArray){
  36. JSONArray jsonArray=(JSONArray)obj;
  37. for(int i=0;i<jsonArray.size();i++)
  38. {
  39. childValue=jsonArray.get(i);
  40. child=new Element(tag);
  41. parent.addContent(child);
  42. getXMLFromObject(childValue,tag,child,count);
  43. }
  44. }else if(obj instanceof Date){
  45. SimpleDateFormat sf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  46. parent.setText(sf.format((Date)obj));
  47. }else{
  48. parent.setText(obj.toString());
  49. }
  50. }
  51. public static void main(String[] args) throws ParseException
  52. {
  53. JSONObject rootObject=new JSONObject();
  54. JSONArray dataArray=new JSONArray();
  55. JSONObject dataObject1=new JSONObject();
  56. dataObject1.put("PERSONID", "35020500200610000000000701355117");
  57. dataObject1.put("XM", "吴聪楠");
  58. dataObject1.put("SFZH","350624198908052530");
  59. dataArray.add(dataObject1);
  60. JSONObject dataObject2=new JSONObject();
  61. dataObject2.put("PERSONID", "35020500200610000000000701355116");
  62. dataObject2.put("XM", "吴聪楠2");
  63. dataObject2.put("SFZH","350624198908052531");
  64. dataArray.add(dataObject2);
  65. JSONObject dataRootObject=new JSONObject();
  66. dataRootObject.put("Row", dataArray);
  67. JSONObject dataObject=new JSONObject();
  68. dataObject.put("Status", "00");
  69. dataObject.put("ErrorMsg", "");
  70. dataObject.put("Data",dataRootObject);
  71. rootObject.put("ROOT", dataObject);
  72. System.out.println(rootObject.toString());
  73. System.out.println(JsonToXml(rootObject));
  74. }</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 相互转换的更多相关文章

  1. java下XML与JSON互相转换的Utils类

    原文:http://heipark.iteye.com/blog/1394844 需要json-lib-2.1-jdk15.jar和xom-1.2.5.jar,maven pom.xml如下: < ...

  2. 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 ...

  3. java中Xml、json之间的相互转换

    旁白: 最近关于xml与json之间的转换都搞蒙了,这里写一个demo,以后备用. 正题: project格式是: jar包是一个一个检出来的,还算干净了. 代码: 工具类: package exer ...

  4. Java网络通信——XML和JSON

    XML(Extensible Markup Language) 定义:一种可扩展的标记性语言 XML有丰富的编码工具,比如Dom4j.JDom等. JSON(JavaScript Object Not ...

  5. json相关类库,java对象与json相互转换

    有效选择七个关于Java的JSON开源类库 转自:http://www.open-open.com/lib/view/open1397870197828.html 翻译: (英语原文:http://w ...

  6. 将Java对象序列化成JSON和XML格式

    1.先定义一个Java对象Person: public class Person { String name; int age; int number; public String getName() ...

  7. WebService(2)-XML系列之Java和Xml之间相互转换

    源代码下载:链接:http://pan.baidu.com/s/1ntL1a7R password: rwp1 本文主要讲述:使用jaxb完毕对象和xml之间的转换 TestJava2xml.java ...

  8. java XML转JSON格式

    标签: XML转Json json 2014-05-20 20:55 6568人阅读 评论(6) 收藏 举报  分类: [J2SE基础](20)  代码如下所示,从这个例子中发现了代码库的重要性,如果 ...

  9. 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:// ...

随机推荐

  1. 原生js--客户端存储的种类

    客户端存储遵循同源策略,不同的站点页面之间不可以相互读取对方的数据,但同一站点的不同页面之间可以共享存储的数据 客户端存储的种类: 1.web存储 localStorage.sessionStorag ...

  2. sencha touch 2.3.1 list emptyText不显示

    如图所示,有时候没有取到任何的数据. 那么我们就需要显示没有获取到内容这一类提示,显示内容通常通过emptyText这个属性来配置. 但是在sencha touch 2.3.1之中有可能会出问题,所以 ...

  3. Centos 7 系统操作

    修改系统语言 https://blog.csdn.net/hanchao_h/article/details/72820999 修改后,马上查看man bash,发现已经变成了英文版.(中文版句子不通 ...

  4. nginx作为下载文件服务器

    1.前言 当我们希望分享自己的文件时,有多种方式,局域网可以采用共享,rtx传输,qq传输,发送到邮箱,直接u盘拷贝等等.但最简单的就是开启本地服务器,其他电脑通过网页的方式直接下载,这里介绍使用ng ...

  5. 【CF819D】Mister B and Astronomers EXGCD

    [CF819D]Mister B and Astronomers 题意:小鼠Jack想当太空人(哦不,太空鼠)!为此,它在夜晚带领一堆小朋友一起来到户外看星星.一共有 $n​$ 只小鼠,这些小鼠围成一 ...

  6. Testlink定位实例

    最近在对testlink系统上做点东西,在定位部分元素时折腾了一段时间才搞定,特此记录 如下图 要定位红色框部分 一:先分析testlink页面结构,如下 如二个frame组成,一个是titlebar ...

  7. undefined类型

    undefined类型 只有一个特殊的值 undefined   在使用var声明变量但未对其加以初始化,这个变量的值就是undefined 值是undefined的情况: 1.显示声明并初始化变量值 ...

  8. 万事开头难 && 实践出真知

    实践出真知,真是千古不变的真理. 前几天在顺手做一个万年历项目,实现了用TFT屏显示实时时间,日期,温度,和按键设置时间,能在特定时间显示特定的话语在显示屏上面.其实这个项目现在想想还是挺简单的.我的 ...

  9. pandas生成时间列表(某段连续时间或者固定间隔时间段)

    python生成一个日期列表 首先导入pandas import pandas as pd def get_date_list(begin_date,end_date): date_list = [x ...

  10. Redis 如何保持和MySQL数据一致

    1. MySQL持久化数据,Redis只读数据 redis在启动之后,从数据库加载数据. 读请求: 不要求强一致性的读请求,走redis,要求强一致性的直接从mysql读取 写请求: 数据首先都写到数 ...