CS及BS模式当前使用最多的为JSON与XML二种格式进行数据传送。所以经常需要要二者进行转换操作。
前提:json :net.sf.json-lib
重点除去节点中type属性(由json --> xml)与由空值“”(由xml-->json)。
package com.jqyc.jase;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TreeMap;
import org.junit.Test;
import net.sf.json.JSONObject;
import net.sf.json.xml.XMLSerializer;
public class TestXmlToJson {
@Test
public void test() {
XMLSerializer xmlSerializer = new XMLSerializer();
String tmpStr = xmlSerializer.write(JSONObject.fromObject("{'json':'is easy'}"));
System.out.println( "默认情况下进行转换:"+tmpStr);
xmlSerializer.setRootName("GRRROT");
xmlSerializer.setTypeHintsEnabled(false); // 去除 节点中type类型
TreeMap treeMap = new TreeMap();
treeMap.put("VERSION", "v1.0");
treeMap.put("INSTICODE", "10000001");
treeMap.put("DATETIME", new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()));
treeMap.put("MSGTYPE", "M_REGISTER");
treeMap.put("TRCNO", String.valueOf(System.currentTimeMillis()));
treeMap.put("M_NO", String.valueOf(System.currentTimeMillis()));
treeMap.put("M_NAME", "个体户");
treeMap.put("M_PROVINCE", "1000");
treeMap.put("M_CITY", "1000");
treeMap.put("M_ADDR", "北京");
treeMap.put("ACCNAME", "小孟");
treeMap.put("CERTNO", "430527198811238733");
treeMap.put("PHONE", "13521486289");
treeMap.put("INPAN", "6212226020004464444827");
treeMap.put("INPAN_BANK_NAME", "工商银行");
treeMap.put("INPAN_BANK_CODE", "102100099996");
treeMap.put("INPAN_BRANCH_NAME", "");
treeMap.put("INPAN_BRANCH_CODE", "");
treeMap.put("INPAN_BRANCH_PROVINCE", "");
treeMap.put("INPAN_BRANCH_CITY", "");
treeMap.put("OPER_FLAG", "A");
treeMap.put("FEE_T0", "100");
treeMap.put("RATE_T0", "0.35");
System.out.println( "打印原始JSON"+JSONObject.fromObject(treeMap).toString(1));
String xml = xmlSerializer.write(JSONObject.fromObject(treeMap)).toString();
System.out.println("JSON->XML后:"+xml);
JSONObject json = JSONObject.fromObject(((JSONObject) xmlSerializer.read(xml)).toString().replace("[]", "\"\""));
System.out.println("XML-->JSON后"+json.toString(1));
System.out.println("取节点为空值“”的节点值 :" + json.getString("INPAN_BRANCH_CODE"));
}
}
默认情况下进行转换:
is easy
打印原始JSON{
"ACCNAME": "小孟",
"CERTNO": "430527198811238733",
"DATETIME": "20180111134009",
"FEE_T0": "100",
"INPAN": "6212226020004464444827",
"INPAN_BANK_CODE": "102100099996",
"INPAN_BANK_NAME": "工商银行",
"INPAN_BRANCH_CITY": "",
"INPAN_BRANCH_CODE": "",
"INPAN_BRANCH_NAME": "",
"INPAN_BRANCH_PROVINCE": "",
"INSTICODE": "10000001",
"MSGTYPE": "M_REGISTER",
"M_ADDR": "北京",
"M_CITY": "1000",
"M_NAME": "个体户",
"M_NO": "1515649209896",
"M_PROVINCE": "1000",
"OPER_FLAG": "A",
"PHONE": "13521486289",
"RATE_T0": "0.35",
"TRCNO": "1515649209896",
"VERSION": "v1.0"
}
JSON->XML后:
小孟 430527198811238733 20180111134009 100 6212226020004464444827 102100099996 工商银行 10000001 M_REGISTER 北京 1000 个体户 1515649209896 1000 A 13521486289 0.35 1515649209896 v1.0
[net.sf.json.xml.XMLSerializer.getType(XMLSerializer.java:736)] - Using default type string
XML-->JSON后{
"ACCNAME": "小孟",
"CERTNO": "430527198811238733",
"DATETIME": "20180111134009",
"FEE_T0": "100",
"INPAN": "6212226020004464444827",
"INPAN_BANK_CODE": "102100099996",
"INPAN_BANK_NAME": "工商银行",
"INPAN_BRANCH_CITY": "",
"INPAN_BRANCH_CODE": "",
"INPAN_BRANCH_NAME": "",
"INPAN_BRANCH_PROVINCE": "",
"INSTICODE": "10000001",
"MSGTYPE": "M_REGISTER",
"M_ADDR": "北京",
"M_CITY": "1000",
"M_NAME": "个体户",
"M_NO": "1515649209896",
"M_PROVINCE": "1000",
"OPER_FLAG": "A",
"PHONE": "13521486289",
"RATE_T0": "0.35",
"TRCNO": "1515649209896",
"VERSION": "v1.0"
}
取节点为空值“”的节点值 :
参考:
api : http://json-lib.sourceforge.net/apidocs/net/sf/json/xml/XMLSerializer.html
xmlserializer 错误解决方法:https://coderanch.com/t/545109/ide/JSON-XMLSerializer-class-error
基本用法:https://www.programcreek.com/java-api-examples/index.php?api=net.sf.json.xml.XMLSerializer
基本用法:http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html
xmltojson问题解决:http://hw1287789687.iteye.com/blog/2229267