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<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





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值