java json 转xml xml转json

3,741 阅读2分钟

目录

依赖

代码

json转xml字符串

xml转json

调用

引入jar

日志


code

download.csdn.net/download/we…

依赖

  <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6.1</version>
        </dependency> 

<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.32</version>
		</dependency>

代码

json转xml字符串


	/**
	 * json转xml
	 * 	自动添加一个根元素 <info></info>
	 * 
	 * @param jo JSONObject对象
	 * @param root 转换的xml根元素 默认info   传入 null  or String 字符串
	 * 
	 * @return xml Str字符串
	 */
	public String jsonObjToXml(JSONObject jo,String root){
		JSONObject jo0 = new JSONObject();
		jo0.put( root == null ? "info": root, jo);
		String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"+ jsontoxml(jo0, "");
		return xml;
	}
	
	/**
	 * json对象转xml 
	 * 
	 * @param jo JSONObject
	 * @param gt "\n" 位移符
	 * 
	 * @return XML Str字符串
	 * 
	 */
	@SuppressWarnings("rawtypes")
	public String jsontoxml(JSONObject jo, String gt) {
		StringBuffer xmlStr = new StringBuffer();
		try {
			Iterator iter = jo.entrySet().iterator();
			while (iter.hasNext()) {
				Map.Entry entry = (Map.Entry) iter.next();
				String key = entry.getKey().toString();
				String val = entry.getValue().toString();
				if (val.substring(0, 1).equals("{")) {
					xmlStr.append(gt);
					xmlStr.append("<");
					xmlStr.append(key);
					xmlStr.append(">\n");
					xmlStr.append(jsontoxml(JSONObject.parseObject(val), gt + "\t"));
					xmlStr.append(gt);
					xmlStr.append("</");
					xmlStr.append(key);
					xmlStr.append(">\n");
				} else if (val.substring(0, 1).equals("[")) {
					xmlStr.append(gt);
					xmlStr.append("<");
					xmlStr.append(key);
					xmlStr.append(">\n");
					JSONArray ja = JSONArray.parseArray(val);
					for (int i = 0; i < ja.size(); i++) {
						JSONObject jo2 = new JSONObject();
						jo2.put("object", ja.getJSONObject(i));
						xmlStr.append(jsontoxml(jo2, gt + "\t"));
					}
					xmlStr.append(gt);
					xmlStr.append("</");
					xmlStr.append(key);
					xmlStr.append(">\n");
				} else {
					xmlStr.append(gt);
					xmlStr.append("<");
					xmlStr.append(key);
					xmlStr.append(">");
					xmlStr.append(val);
					xmlStr.append("</");
					xmlStr.append(key);
					xmlStr.append(">\n");
				}
			}
		} catch (Exception e) {
			logger.info("jo=" + jo);
			logger.info(e);
			return "<error>1</error>";
		}

		return xmlStr.toString();
	}

 

xml转json

/**
	 * xml字符串转json字符串
	 *   xml的根元素是不会遍历出来,而是直接作为对象的
	 *	 如<info><ab>ss</ab></info> = {"ab":"ss"}  如果带上根元素即为{"info":{"ab":"ss"}}}
	 *   
	 * @param xmlStrroot
	 * @param root 根元素  默认为info 传入 null  or String 字符串
	 * 
	 * @return
	 * 
	 * 
	 */
	public  String xmlStrToJsonStr(String xmlStr,String root) {
		String st = "";
		try {
			Document doc = DocumentHelper.parseText(xmlStr);
			JSONObject json = new JSONObject();
			dom4jJson(doc.getRootElement(), json);
			JSONObject jo = new JSONObject();
			jo.put(root==null ? "info" : root, json);
			st = jo.toJSONString();
		} catch (DocumentException e) {
			e.printStackTrace();
		}
		return st;
	}

	/**
	 * xml文档对象转json对象
	 * 
	 * @param element
	 * 
	 * @param json
	 * 
	 */
	public  void dom4jJson(Element element, JSONObject json) {
		// 如果是属性
		for (Object o : element.attributes()) {
			Attribute attr = (Attribute) o;
			if (!isEmpty(attr.getValue())) {
				json.put("@" + attr.getName(), attr.getValue());
			}
		}
		@SuppressWarnings("unchecked")
		List<Element> chdEl = element.elements();
		if (chdEl.isEmpty() && !isEmpty(element.getText())) {// 如果没有子元素,只有一个值
			json.put(element.getName(), element.getText());
		}
		for (Element e : chdEl) {// 有子元素
			if (!e.elements().isEmpty()) {// 子元素也有子元素
				JSONObject chdjson = new JSONObject();
				dom4jJson(e, chdjson);
				Object o = json.get(e.getName());
				if (o != null) {
					JSONArray jsona = null;
					if (o instanceof JSONObject) {// 如果此元素已存在,则转为jsonArray
						JSONObject jsono = (JSONObject) o;
						json.remove(e.getName());
						jsona = new JSONArray();
						jsona.add(jsono);
						jsona.add(chdjson);
					}
					if (o instanceof JSONArray) {
						jsona = (JSONArray) o;
						jsona.add(chdjson);
					}
					json.put(e.getName(), jsona);
				} else {
					if (!chdjson.isEmpty()) {
						json.put(e.getName(), chdjson);
					}
				}
			} else {// 子元素没有子元素
				for (Object o : element.attributes()) {
					Attribute attr = (Attribute) o;
					if (!isEmpty(attr.getValue())) {
						json.put("@" + attr.getName(), attr.getValue());
					}
				}
				if (!e.getText().isEmpty()) {
					json.put(e.getName(), e.getText());
				}
			}
		}
	}
	
	public static boolean isEmpty(String str) {
		if (str == null || str.trim().isEmpty() || "null".equals(str)) {
			return true;
		}
		return false;
	}

调用


	private final static Log logger = LogFactory.getLog(JsonOrXmlTransformation.class);

	//	test
	public static void main(String[] args) throws DocumentException {
		String xmlData="<?xml version=\"1.0\" encoding=\"utf-8\"?>\r\n" + 
				"<RESULT>\r\n" + 
					"<DESC>请求成功</DESC>\r\n" + 
					"<DATA>\r\n" + 
					"	<RECORDS>\r\n" + 
					"			<RECORD>\r\n" + 
					"				<STUFF_SEQ>value1</STUFF_SEQ>\r\n" + 
					"				<ATTACH_NAME>value2</ATTACH_NAME>\r\n" + 
					"				<ATTACH_PATH>value2</ATTACH_PATH>\r\n" + 
					"				<ATTACH_NAME>value2</ATTACH_NAME>\r\n" + 
					"				 \r\n" + 
					"			</RECORD>\r\n" + 
					"			<RECORD>\r\n" + 
					"				<STUFF_SEQ>value1</STUFF_SEQ>\r\n" + 
					"				<ATTACH_NAME>value2</ATTACH_NAME>\r\n" + 
					"				<ATTACH_PATH>value2</ATTACH_PATH>\r\n" + 
					"				<ATTACH_NAME>value2</ATTACH_NAME>\r\n" + 
					"				 \r\n" + 
					"			</RECORD>\r\n" + 
					"	</RECORDS>\r\n" + 
					"</DATA>\r\n" + 
				"</RESULT>\r\n" + 
				"";
		
		//test xml to json
		String jsonstr = new JsonOrXmlTransformation().xmlStrToJsonStr(xmlData,"RESULT");
		logger.info(jsonstr);
		
		//test json to xml
		String xmlStr = new JsonOrXmlTransformation().jsonObjToXml(JSONObject.parseObject(jsonstr), null);
		logger.info(xmlStr);
	}

 

引入jar

import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

日志

ok

 

 

持续更新