报文:
请求
{
"timeStamp": "时间戳",
"requestId": "请求标识",
"txBrNo": "机构编码",
"chnlCode": "渠道应用编码",
"serviceCode": "服务代码",
"svcSubCode": "服务细分编码",
"access_token": "token",
"sign": "签名",
"encryptAlgo": "加密算法",
"encodeKey": "加密算法密钥",
"version": "版本号",
"charset": "字符编码",
"requestData": {
"sysHead": {
"sourceSysTranDate": "发起系统交易日期",
"sourceSysTimeStamp": "发起系统交易时间",
"sourceSysCode": "发起方系统编码",
"glsTraceNo": "全局流水号",
"txMode": "交易模式",
"ttyId": "终端标识"
},
"body": {
"cstNo": "核心客户号"
}
}
}
响应:
{
"timeStamp": "时间戳",
"requestId": "请求标识",
"txBrNo": "机构编码",
"chnlCode": "渠道应用编码",
"serviceCode": "服务代码",
"svcSubCode": "服务细分编码",
"access_token": "token",
"sign": "签名",
"encryptAlgo": "加密算法",
"encodeKey": "加密算法密钥",
"version": "版本号",
"charset": "字符编码",
"responseData": {
"sysHead": {
"retCode": "交易返回码",
"retMsg": "交易返回信息",
"tranDate": "请求日期",
"tranTimeStamp": "请求时间"
},
"body": {
"cstNo": "核心客户号"
}
}
}
要求json转xml,xml转json的
接上一个回答的补充,增加了jsonArray的处理
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.SAXException;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
*
* 〈XML和json相关转化〉<br/>
* 〈包含主要入口类和相关测试〉<br/>
* 〈此处使用了约定模式,json没有一个根节点的情况下,默认使用default_root,针对json的数组处理使用默认default_item〉
*
* @author ghostpbx
* @see [相关类/方法](可选)
* @since [产品/模块版本] (可选)
*/
public class XmlJsonTrans {
private static final String ENCODING_UTF8 = "UTF-8";
private static final String DEFAULT_ROOT = "default_root";
private static final String ITEM_NAME = "default_item";
public static void main(String[] args) throws IOException, SAXException, DocumentException {
String jsonStr = readFileContent("D:/devEnv/13-file/jsondemo.txt");
JSONObject jobj = JSON.parseObject(jsonStr);
System.out.println(json2Xml(jobj));
String xmlStr = readFileContent("D:/devEnv/13-file/xmldemo3.txt");
System.out.println(xml2Json(xmlStr));
}
/**
*
* 功能描述: <br/>
* 〈JSON对象转xml字符串〉
*
* @param json
* @return
* @throws SAXException
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static String json2Xml(JSONObject jsonObj) throws SAXException {
return json2Doc(jsonObj).asXML();
}
/**
*
* 功能描述: <br/>
* 〈JSON对象转Document对象〉
*
* @param jsonObj
* @return
* @throws SAXException
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
private static Document json2Doc(JSONObject jsonObj) throws SAXException {
Document doc = DocumentHelper.createDocument();
doc.setXMLEncoding(ENCODING_UTF8);
if (jsonObj.keySet().size() > 1) {
Element root = json2Element(jsonObj, DEFAULT_ROOT);
doc.add(root);
} else {
for (String rootKey : jsonObj.keySet()) {
Object o = jsonObj.get(rootKey);
if (o instanceof JSONObject) {
Element root = json2Element(jsonObj.getJSONObject(rootKey), rootKey);
doc.add(root);
} else if (o instanceof JSONArray) {
}
break;
}
}
return doc;
}
/**
*
* 功能描述: <br/>
* 〈obj对象转化为Element〉
*
* @param obj
* @param nodeName
* @return
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
private static Element json2Element(Object obj, String nodeName) {
if (obj instanceof JSONObject) {
return jsonObj2Element((JSONObject) obj, nodeName);
} else if (obj instanceof JSONArray) {
return jsonArray2Element((JSONArray) obj, nodeName);
}
Element nodeEle = DocumentHelper.createElement(nodeName);
return nodeEle;
}
/**
*
* 功能描述: <br/>
* 〈JSON对象转Element对象〉
*
* @param jsonObj
* @param nodeName
* @return
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
private static Element jsonObj2Element(JSONObject jsonObj, String nodeName) {
Element nodeEle = DocumentHelper.createElement(nodeName);
for (String key : jsonObj.keySet()) {
Object child = jsonObj.get(key);
if (child instanceof JSONObject) {
nodeEle.add(jsonObj2Element(jsonObj.getJSONObject(key), key));
} else if (child instanceof JSONArray) {
nodeEle.add(jsonArray2Element((JSONArray) child, key));
} else {
Element element = DocumentHelper.createElement(key);
element.setText(jsonObj.getString(key));
nodeEle.add(element);
}
}
return nodeEle;
}
/**
*
* 功能描述: <br/>
* 〈json数组转化Element对象〉
*
* @param jsonArray
* @param nodeName
* @return
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
private static Element jsonArray2Element(JSONArray jsonArray, String nodeName) {
Element nodeEle = DocumentHelper.createElement(nodeName);
for (int i = 0; i < jsonArray.size(); i++) {
Object obj = jsonArray.get(i);
if (obj instanceof JSONObject) {
JSONObject jsonObj = (JSONObject) obj;
nodeEle.add(json2Element(jsonObj, ITEM_NAME));
} else if (obj instanceof JSONArray) {
JSONArray childJsonArray = (JSONArray) obj;
nodeEle.add(jsonArray2Element(childJsonArray, ITEM_NAME));
}
}
return nodeEle;
}
/**
*
* 功能描述: <br/>
* 〈XML字符串转JSON对象〉
*
* @param xml
* @return
* @throws DocumentException
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static String xml2Json(String xml) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(new StringReader(xml));
Element root = document.getRootElement();
if (!DEFAULT_ROOT.equals(root.getName())) {
JSONObject json = new JSONObject();
json.put(root.getName(), element2Json(root));
return json.toString();
} else {
return element2Json(root).toString();
}
}
/**
*
* 功能描述: <br/>
* 〈element转化为Object〉<br/>
* 〈object为JSONObject和JSONArray对象〉
*
*
* @param element
* @return
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
private static Object element2Json(Element element) {
JSONObject json = new JSONObject();
JSONArray jsonArray = new JSONArray();
boolean isArray = false;
for (Object child : element.elements()) {
Element e = (Element) child;
if (ITEM_NAME.equals(e.getName())) {
jsonArray.add(element2Json(e));
isArray = true;
} else {
if (e.elements().isEmpty()) {
json.put(e.getName(), e.getText());
} else {
json.put(e.getName(), element2Json(e));
}
}
}
return isArray ? jsonArray : json;
}
/**
*
* 功能描述: <br/>
* 〈读取文件,为了能够读取数据方便使用测试〉
*
* @param fileName
* @return
* @throws IOException
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
private static String readFileContent(String fileName) throws IOException {
File file = new File(fileName);
BufferedReader reader = null;
StringBuffer sbf = new StringBuffer();
try {
reader = new BufferedReader(new FileReader(file));
String tempStr;
while ((tempStr = reader.readLine()) != null) {
sbf.append(tempStr);
}
reader.close();
return sbf.toString();
} catch (IOException e) {
throw e;
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
throw e1;
}
}
}
}
}
需要引入的jar
com.alibaba
fastjson
1.2.9
dom4j
dom4j
1.6.1
注意:fastJSON的安全问题,可以进行替换
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.xml.sax.SAXException;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
/**
*
* 〈XML和json相关转化〉<br>
* 〈包含主要入口类和相关测试〉
*
* @author 14091863
* @see [相关类/方法](可选)
* @since [产品/模块版本] (可选)
*/
public class XmlJsonTrans {
private static final String ENCODING_UTF8 = "UTF-8";
private static final String DEFAULT_ROOT = "root";
public static void main(String[] args) throws IOException, SAXException, DocumentException {
String jsonStr = readFileContent("D:/devEnv/13-file/jsondemo.txt");
JSONObject jobj = JSON.parseObject(jsonStr);
System.out.println(json2Xml(jobj));
String xmlStr = readFileContent("D:/devEnv/13-file/xmldemo.txt");
System.out.println(xml2Json(xmlStr));
}
/**
*
* 功能描述: <br>
* 〈JSON对象转xml字符串〉
*
* @param json
* @return
* @throws SAXException
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static String json2Xml(JSONObject jsonObj) throws SAXException {
//String xmlHeader = "<?xml version=\"1.0\" encoding=\""+ENCODING_UTF8+"\"?>";
//return xmlHeader+json2Doc(jsonObj).asXML();
return json2Doc(jsonObj).asXML();
}
/**
*
* 功能描述: <br>
* 〈JSON对象转Document对象〉
*
* @param jsonObj
* @return
* @throws SAXException
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static Document json2Doc(JSONObject jsonObj) throws SAXException {
Document doc = DocumentHelper.createDocument();
doc.setXMLEncoding(ENCODING_UTF8);
if(jsonObj.keySet().size()>1){
Element root = json2Element(jsonObj, DEFAULT_ROOT);
doc.add(root);
}else{
for (String rootKey : jsonObj.keySet()) {
Element root = json2Element(jsonObj.getJSONObject(rootKey), rootKey);
doc.add(root);
break;
}
}
return doc;
}
/**
*
* 功能描述: <br>
* 〈JSON对象转Element对象〉
*
* @param jsonObj
* @param nodeName
* @return
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static Element json2Element(JSONObject jsonObj, String nodeName) {
Element nodeEle = DocumentHelper.createElement(nodeName);
for (String key : jsonObj.keySet()) {
Object child = jsonObj.get(key);
if (child instanceof JSONObject) {
nodeEle.add(json2Element(jsonObj.getJSONObject(key), key));
} else {
Element element = DocumentHelper.createElement(key);
element.setText(jsonObj.getString(key));
nodeEle.add(element);
}
}
return nodeEle;
}
/**
*
* 功能描述: <br>
* 〈XML字符串转JSON对象〉
*
* @param xml
* @return
* @throws DocumentException
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static JSONObject xml2Json(String xml) throws DocumentException {
JSONObject json = new JSONObject();
SAXReader reader = new SAXReader();
Document document = reader.read(new StringReader(xml));
Element root = document.getRootElement();
if(!DEFAULT_ROOT.equals(root.getName())){
json.put(root.getName(), element2Json(root));
}else{
json = element2Json(root);
}
return json;
}
/**
*
* 功能描述: <br>
* 〈Element对象转JSON对象〉
*
* @param element
* @return
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static JSONObject element2Json(Element element) {
JSONObject json = new JSONObject();
for (Object child : element.elements()) {
Element e = (Element) child;
if (e.elements().isEmpty()) {
json.put(e.getName(), e.getText());
} else {
json.put(e.getName(), element2Json(e));
}
}
return json;
}
/**
*
* 功能描述: <br>
* 〈读取文件,为了能够读取数据方便使用测试〉
*
* @param fileName
* @return
* @throws IOException
* @see [相关类/方法](可选)
* @since [产品/模块版本](可选)
*/
public static String readFileContent(String fileName) throws IOException {
File file = new File(fileName);
BufferedReader reader = null;
StringBuffer sbf = new StringBuffer();
try {
reader = new BufferedReader(new FileReader(file));
String tempStr;
while ((tempStr = reader.readLine()) != null) {
sbf.append(tempStr);
}
reader.close();
return sbf.toString();
} catch (IOException e) {
throw e;
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
throw e1;
}
}
}
}
}
依赖的包:
json-lib-2.4-jdk15.jar
ezmorph-1.0.6.jar
xom-1.2.1.jar
commons-lang-2.1.jar
commons-io-1.3.2.jar
jaxen-1.1.jar
package com.cash.util;
import java.io.IOException;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import net.sf.json.JSON;
import net.sf.json.xml.XMLSerializer;
public class Test {
public static void ConvertXMLtoJSON() {
InputStream is = ConvertXMLtoJSON.class.getResourceAsStream("sample.xml");
String xml;
try {
xml = IOUtils.toString(is);
System.out.println(xml);
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.read(xml);
System.out.println(json.toString(1));
} catch (IOException e) {
e.printstackTrace();
}
}
public static void main(String[] args) {
ConvertXMLtoJSON();
}
}
/**
* 将xml字符串转换为JSON对象
* @param xmlFile xml字符串
* @return JSON对象
*/
public JSON getJSONFromXml(String xmlString) {
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.read(xmlString);
return json;
}
/**
* 将xmlDocument转换为JSON对象
* @param xmlDocument XML Document
* @return JSON对象
*/
public JSON getJSONFromXml(Document xmlDocument) {
String xmlString = xmlDocument.toString();
return getJSONFromXml(xmlString);
}
/**
* 将xml字符串转换为JSON字符串
* @param xmlString
* @return JSON字符串
*/
public String getJSONStringFromXml(String xmlString ) {
return getJSONFromXml(xmlString).toString();
}
/**
* 将xmlDocument转换为JSON字符串
* @param xmlDocument XML Document
* @return JSON字符串
*/
public String getXMLtoJSONString(Document xmlDocument) {
return getJSONStringFromXml(xmlDocument.toString());
}
/**
* 读取XML文件准换为JSON字符串
* @param xmlFile XML文件
* @return JSON字符串
*/
public String getXMLFiletoJSONString(String xmlFile) {
InputStream is = JsonUtil.class.getResourceAsStream(xmlFile);
String xml;
JSON json = null;
try {
xml = IOUtils.toString(is);
XMLSerializer xmlSerializer = new XMLSerializer();
json = xmlSerializer.read(xml);
} catch (IOException e) {
e.printstackTrace();
}
return json.toString();
}
/**
* 将Java对象转换为JSON格式的字符串
*
* @param javaObj
* POJO,例如日志的model
* @return JSON格式的String字符串
*/
public static String getJsonStringFromJavaPOJO(Object javaObj) {
return JSONObject.fromObject(javaObj).toString(1);
}
/**
* 将Map准换为JSON字符串
* @param map
* @return JSON字符串
*/
public static String getJsonStringFromMap(Map, ?> map) {
JSONObject object = JSONObject.fromObject(map);
return object.toString();
}
public static JSONObject xmlToJson(String xml) throws DocumentException {
JSONObject jsonObject = new JSONObject();
Document document = DocumentHelper.parseText(xml);
//获取根节点元素对象
Element root = document.getRootElement();
iterateNodes(root, jsonObject);
return jsonObject;
}
private static void iterateNodes(Element node, JSONObject json) {
//获取当前元素名称
String nodeName = node.getName();
//判断已遍历的JSON中是否已经有了该元素的名称
if(json.containsKey(nodeName)){
//该元素在同级下有多个
Object Object = json.get(nodeName);
JSONArray array = null;
if(Object instanceof JSONArray){
array = (JSONArray) Object;
}else {
array = new JSONArray();
array.add(Object);
}
//获取该元素下所有子元素
List listElement = node.elements();
if(listElement.isEmpty()){
//该元素无子元素,获取元素的值
String nodeValue = node.getTextTrim();
array.add(nodeValue);
json.put(nodeName, array);
return ;
}
//有子元素
JSONObject newJson = new JSONObject();
//遍历所有子元素
for(Element e:listElement){
//递归
iterateNodes(e,newJson);
}
array.add(newJson);
json.put(nodeName, array);
return ;
}
//该元素同级下第一次遍历
//获取该元素下所有子元素
List listElement = node.elements();
if(listElement.isEmpty()){
//该元素无子元素,获取元素的值
String nodeValue = node.getTextTrim();
json.put(nodeName, nodeValue);
return ;
}
//有子节点,新建一个JSONObject来存储该节点下子节点的值
JSONObject object = new JSONObject();
for(Element e:listElement){
//递归
iterateNodes(e,object);
}
json.put(nodeName, object);
return ;
}
org.json.JSONObject bodyJson = XML.toJSONObject(xml);