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<String, Object>();
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"));
}
}
默认情况下进行转换:<?xml version="1.0" encoding="UTF-8"?>
<o><json type="string">is easy</json></o>
打印原始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后:<?xml version="1.0" encoding="UTF-8"?>
<GRRROT><ACCNAME>小孟</ACCNAME><CERTNO>430527198811238733</CERTNO><DATETIME>20180111134009</DATETIME><FEE_T0>100</FEE_T0><INPAN>6212226020004464444827</INPAN><INPAN_BANK_CODE>102100099996</INPAN_BANK_CODE><INPAN_BANK_NAME>工商银行</INPAN_BANK_NAME><INPAN_BRANCH_CITY/><INPAN_BRANCH_CODE/><INPAN_BRANCH_NAME/><INPAN_BRANCH_PROVINCE/><INSTICODE>10000001</INSTICODE><MSGTYPE>M_REGISTER</MSGTYPE><M_ADDR>北京</M_ADDR><M_CITY>1000</M_CITY><M_NAME>个体户</M_NAME><M_NO>1515649209896</M_NO><M_PROVINCE>1000</M_PROVINCE><OPER_FLAG>A</OPER_FLAG><PHONE>13521486289</PHONE><RATE_T0>0.35</RATE_T0><TRCNO>1515649209896</TRCNO><VERSION>v1.0</VERSION></GRRROT>
[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