json与xml互转

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后:
小孟430527198811238733201801111340091006212226020004464444827102100099996工商银行10000001M_REGISTER北京1000个体户15156492098961000A135214862890.351515649209896v1.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
 
  



你可能感兴趣的:(知识管理)