fastjson-1.2.7.jar集成扩展,通用json文本解析源码
源文件webeasy/WEB-INF/classes/JSONEasy.java
package htok.apps;
import htok.Path;
import htok.tools.*;
import htok.we.html.*;
import htok.we.*;
import javax.servlet.http.*;
import java.util.*;
import com.alibaba.fastjson.*;

public class JSONEasy extends JspEasy
{
/*/构造对象
	public JSONEasy()
	{
		super();
	}*/
	public JSONEasy(HttpServletRequest request,HttpServletResponse response)
	{
		super(request,response);
	}
//解析JSON文本
	public void parseJson(String json)
	{parseJson(json,"j");}
	public void parseJson(String json,String prefix)
	{
		int pos = json.indexOf("[");
		if(pos==-1)
		{
			try {
				JSONObject jsonObj = JSON.parseObject(json);
				json2Bag(jsonObj,prefix,0);
			} catch (Exception e) {
				getBag("pPage").set("jsonerror", "Invalid JSON format");log(e.getMessage());
			}
		}
		else if(pos==0)
		{
			try {
				JSONArray jsonArr = JSON.parseArray(json);
				jsonArray2Bag(jsonArr,prefix,0);
			} catch (Exception e) {
				getBag("pPage").set("jsonerror", "Invalid JSON format");
			}
		}
		else{
			String str = json.substring(0,pos);
			str = str.trim();
			if(str.equals(""))
			{
				try {
					JSONArray jsonArr = JSON.parseArray(json);
					jsonArray2Bag(jsonArr,prefix,0);
				} catch (Exception e) {
					getBag("pPage").set("jsonerror", "Invalid JSON format");
				}
			}
			else{
				try {
					JSONObject jsonObj = JSON.parseObject(json);
					json2Bag(jsonObj,prefix,0);
				} catch (Exception e) {
					getBag("pPage").set("jsonerror", "Invalid JSON format");
				}
			}
		}
	}
	public void json2Bag(JSONObject jsonObj,String prefix,int level)
	{
		try {
			String key;
			String value;
			Bag b0 = new Bag(Bag.BAG);
			String prefix1;
			if(prefix.indexOf("0")>0)
				prefix1 = new StringBuffer(prefix).append(".").append(String.valueOf(level)).toString();
			else
				prefix1 = new StringBuffer(prefix).append(String.valueOf(level)).toString();
			setBag(prefix1,b0);//log(prefix1);
			int i=0;
			for (Map.Entry<String, Object> entry : jsonObj.entrySet())
			{
				key = entry.getKey();
				if(!tools.canName(key)) key = new StringBuffer("_").append(key).toString();
				Object ob = entry.getValue();
				if(ob instanceof JSONArray)//如果下级是json数组就调jsonArray2Bag
				{
					jsonArray2Bag((JSONArray)ob,prefix1,i);
					b0.set(key,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString());
				}
				else if(ob instanceof JSONObject)//如果下级是json对象就递归
				{
					json2Bag((JSONObject)ob,prefix1,i);
					b0.set(key,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString());
				}
				else{//如果下级是如果是文本或值,就放进书包
					value = String.valueOf(ob);
					if (!value.equals(""))
						b0.set(key, value);
				}
				i++;
			}
		} catch (Exception e) {
			getBag("pPage").set("jsonerror", "Invalid JSON format");
		}
	}
	public void jsonArray2Bag(JSONArray jsonArray,String prefix,int level)
	{
		try {
			Bag b0 = new Bag(Bag.BAG);
			String prefix1;
			if(prefix.indexOf("0")>0)
				prefix1 = new StringBuffer(prefix).append(".").append(String.valueOf(level)).toString();
			else
				prefix1 = new StringBuffer(prefix).append(String.valueOf(level)).toString();
			setBag(prefix1,b0);//log(prefix1);
			int i=0;
			for(Object ob :jsonArray)
			{
				b0.setSuffix(i);
				if(ob instanceof JSONArray)//如果下级是json数组就递归
				{
					jsonArray2Bag((JSONArray)ob,prefix1,i);
					b0.set("v",new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString());
				}
				else if(ob instanceof JSONObject)//如果下级是json对象就生成一个以对象名为id的书包
				{
					int j=0;
					for (Map.Entry<String, Object> entry : ((JSONObject)ob).entrySet())
					{
						String key = entry.getKey();
						if(!tools.canName(key)) key = new StringBuffer("_").append(key).toString();
						Object ob1 = entry.getValue();
						if(ob1 instanceof JSONArray)//如果下级是json数组就调jsonArray2Bag
						{
							jsonArray2Bag((JSONArray)ob1,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString(),j);
							b0.set(key,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).append(".").append(String.valueOf(j)).toString());
						}
						else if(ob1 instanceof JSONObject)//如果下级是json对象就递归
						{
							json2Bag((JSONObject)ob1,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString(),j);
							b0.set(key,new StringBuffer(prefix1).append(".").append(String.valueOf(i)).append(".").append(String.valueOf(j)).toString());
						}
						else{//如果下级是如果是文本或值,就放进书包
							String value = String.valueOf(ob1);
							if (!value.equals(""))
								b0.set(key, value);
						}
						j++;
					}
					b0.set("v",new StringBuffer(prefix1).append(".").append(String.valueOf(i)).toString());
				}
				else{//如果下级是如果是文本或值,就放进书包
					String value = String.valueOf(ob);
					if (!value.equals(""))
						b0.set("v", value);
				}
				i++;
			}
		} catch (Exception e) {
			getBag("pPage").set("jsonerror", "Invalid JSON format");
		}
	}
	public void log(String str)
	{
		Path.log("JSONEasy_",str);
	}
}

下载:download.csdn.net/detail/tx18/9382604
阅读更多
版权声明:本文为博主原创文章,博主允许自由转载。 https://blog.csdn.net/tx18/article/details/50432670
想对作者说点什么? 我来说一句

fastjson-1.2.7.jar

2018年03月08日 376KB 下载

没有更多推荐了,返回首页

不良信息举报

fastjson-1.2.7.jar集成扩展,通用json文本解析源码

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭