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

原创 2015年12月30日 10:07:34
源文件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
版权声明:本文为博主原创文章,博主允许自由转载。

几个通用组件类库项目 开放源码下载

应众多网友的请求和来信,现决定对动软.net代码生成器生成的三层架构项目中涉及的几个组件类库开发源码,提供下载。期望大家在修改发布时能保留对作者版权的尊重。同时期望有修改或更新的朋友也能上传一份,或共...
  • litp
  • litp
  • 2008年03月20日 23:27
  • 4140

[Android]打造一个Android通用的JSON数据解析框架

目前Android与网络交互使用得最多的是json数据协议,json轻快的特点十分适合移动平台,因此已逐渐取代了xml,下面来看两个常见的json格式: { "code":"10000", "me...
  • zhugehengheng
  • zhugehengheng
  • 2015年04月24日 19:35
  • 1134

通用JSON生成器3

接上文通用JSON生成器,上文给出了一个JSON生成器,用了一段时间,感觉还是有两个地方还不太爽。 待生成的属性必须是public的,否则是获取不到该属性的值的。 对时间如Date类型的不大友好,因为...
  • zdavb
  • zdavb
  • 2016年03月15日 19:35
  • 456

Json通用转换类

using System; using System.Collections.Generic; using System.Text; namespace InterfaceCommon.Common...
  • qq_27462223
  • qq_27462223
  • 2017年08月15日 14:45
  • 201

文本解析

文本解析的方式: 1、正则表达式 2、html的Jsoup.parser解析
  • helihongzhizhuo
  • helihongzhizhuo
  • 2016年08月06日 17:58
  • 223

SpringMVC集成shiro权限(附源码)

springMVC框架这里就不多说了,下面是在springMVC框架上面直接集成shiro代码步骤下面是我项目结构: 1、web.xml添加Shiro Filter shiroFil...
  • z960339491
  • z960339491
  • 2017年04月26日 11:27
  • 735

分享一个C#通用的json操作类

json操作类,支持json格式的字符串常用操作,对象序列化为json字符串、json字符串转换为对象,DataTable转换为json字符串,支持将实体类转换成DataTable。...
  • zhangqiang0551
  • zhangqiang0551
  • 2015年10月16日 15:29
  • 2303

Spring boot 集成mybatis通用mapper配置步骤及注意事项

一、添加依赖 二、继承通用mapper,可以重写和选择需要的mapper方法,可以去掉一些不需要的方法(一般直接继承即可) Mapper3提供的全部的方法,可以查看Mapper3通...
  • gdift
  • gdift
  • 2018年01月06日 10:44
  • 415

将json文本解析为对象

//  {   //      "phone" : ["12345678", "87654321"], // 数组   //      "name" : "yuanzhifei89", // 字符...
  • guotong1988
  • guotong1988
  • 2012年04月16日 14:46
  • 800

spring-data-jpa通用dao的扩展

虽然使用spring data jpa给开发带来了极大的简化,但对于追求更小更快的我们来说,要为每个实体都写一遍数据访问接口却仍显得过于繁琐。如果可以构建一个baseDao,里面配置好了基本的增删改查...
  • syf12354321
  • syf12354321
  • 2017年02月27日 17:48
  • 484
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:fastjson-1.2.7.jar集成扩展,通用json文本解析源码
举报原因:
原因补充:

(最多只允许输入30个字)