JAVA 实现XML与JSON 相互转换
2014-09-03 17:00
766 查看
在工作中,经常碰到XML转为JSON或者JSON转为XML,在这过程中有时嵌套很多层,容易错误,我把实现的代码分享出来,希望对有用到的人提供借鉴。
1.把XML转为JSON格式
<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格式
{"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>
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>
相关文章推荐
- xml和JSON格式相互转换的Java实现
- xml和JSON相互转换的Java实现
- Json-lib 实现 json,java 对象,xml 之间相互转换
- xml和JSON格式相互转换的Java实现
- xml和JSON格式相互转换的Java实现
- Json-lib实现json,java对象,xml之间相互转换 .
- xStream框架完美实现Java对象和xml文档JSON、XML相互转换
- JAVA 实现XML与JSON 相互转换
- xstream:实现JavaBean与XML/JSON的相互转换
- 用php实现xml与json之间的相互转换
- 用php实现xml与json之间的相互转换
- GSON实现Java对象与JSON格式对象相互转换的完全教程
- php实现xml与json之间的相互转换功能实例
- 研究一下 项目 webservice xml和java对象的相互自动转换,json和java对象的相互自动转换
- java中Xml、json之间的相互转换
- 如何在JS中实现相互转换XML和JSON
- JAVA实现json和对象间的相互转换,支持复杂对象格式
- C#中使用JSON.NET实现JSON、XML相互转换
- 利用JAXB实现java对象和xml的相互转换
- php实现xml与json之间的相互转换功能实例