微信支付开发教程JAVA编[003]-json和xml的解析

        注:我已经使用java语言将微信公众号和微信支付开发的所有API功能点都调用测试过一次,后期会在博客中其享给大家.在接下来的这几篇文章中,都是基于我的这个wxsdk4j,有些代码可能在单独的章节中,运行不起来,没问题,等我将所有的章节讲完,共享了wxsdk4j,就能跑起来了,大家别着急,请耐心等待.

 

        调用微信公众号高级接口,需要将数据以json形式提交到微信服务器上,并且在消息会话过程中,微信服务器会以xml的形式转发消息到公众号自己的服务器上.同时调用微信支付接口也需要将数据以xml的形式提交到微信服务器上.这里,我们就讲讲在java中,怎么解析与生成json和xml.

 

一.json的解析与生成

        json的官方网站是:http://www.json.org,在这里,实现了各种语言并且每种语言又有多种版本.我使用的是JSON-Java,它的官方网站是:https://github.com/stleary/JSON-java,下载下来是源码,大家可以制作成jar包,在我的wxsdk4j中,就已经制作成了附带源码的jar包.

        JSON-Java最主要是JSONObject,JSONArray(另外,有一个JSONObject.NULL类,这个类用于处于json中null节点,例如{"name":null}),这2个类很简单,基本就是put和get(请注意get方法在key不存在时,会抛出异常,有一族不抛异常的对应方法,就是opt.我个人极其讨厌java强制使用try catch机制.认识这么多java猿,1个2个都对try catch像色鬼遇上18岁的纯情小姑娘似的,难道就木有1个java猿和我想法一样的么?深求讨厌try catch的java猿,如果是软妹纸,老夫以身相许!!!!!!!!)这2个方法,会用map,list就会用这2个类了.例如,以下代码生成json字符串:

 

JSONArray array = new JSONArray();
array.put("中文");
array.put("英文");
array.put("法文");

JSONObject object = new JSONObject();
object.put("name", "kitty");
object.put("age", 22);
object.put("lang", array);
System.out.println(object.toString());

 

 

 

它生成的json如下(为了好看,我排了下版):

 

{
	"age": 22,
	"name": "kitty",
	"lang": ["中文", "英文", "法文"]
}

 

 

 

另外,因为put方法返回的是this指针,上面的代码也可以写成链式结构,如下:

 

System.out.println( //
		new JSONObject() //
				.put("name", "kitty") //
				.put("age", 22) //
				.put("lang", new JSONArray() //
						.put("中文") //
						.put("英文") //
						.put("法文") //
				).toString() //
		);

是不是很有层次感?

 

 

解析json字符串就更加简单了,直接传入字符串创建对象就行了.例如:

 

new JSONObject(str);
new JSONArray(str);

稍微注意一下,就是如果字符串不是合法的json字符串,创建对象不成功,会抛出异常(异常又见异常!).

 

 

二.xml的解析与生成

        很多人在项目中,都使用xstream,jdom之类的库来解析xml.没有必要.基本库自带的org.w3c.dom已经足够.需要注意的是,很多微信开发人员,使用的好像都是柳峰老大的解析成Map<String, String>的那个函数.其实我想说,xml除了儿子,还有儿子的儿子呢?还有属性呢?虽然属性在微信公众号和微信支付中并不使用.但微信公众号某些事件转发的xml可是有多级节点的,例如摇一摇.周边.下面,给大家一个我封装的工具类,比较万能:

 

/***************************************************************
 * 解析xml
 ***************************************************************/
package wxlib.wxsdk.lib.utils;

import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Pattern;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.json.JSONArray;
import org.json.JSONObject;
import org.w3c.dom.Attr;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.w3c.dom.Text;

public class XMLParser {
	protected static boolean isNull(String str) { //可以匹配JSONObject.NULL
		if(str == null)
			return false;
		str = str.trim();
		return str.equals("null");
	}

	prote
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值