亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? jsonwriter.java

?? JEECSM是JavaEE版網(wǎng)站管理系統(tǒng)(Java Enterprise Edition Content Manage System)的簡(jiǎn)稱。基于java技術(shù)開發(fā)
?? JAVA
字號(hào):
package com.ponyjava.common.struts2.action;

import java.beans.BeanInfo;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.text.CharacterIterator;
import java.text.StringCharacterIterator;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Stack;
import java.util.regex.Pattern;

import org.apache.commons.beanutils.PropertyUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.googlecode.jsonplugin.JSONException;
import com.googlecode.jsonplugin.annotations.JSON;
import com.ponyjava.common.page.Pagination;

@SuppressWarnings("unchecked")
public class JsonWriter {
	private static final Logger log = LoggerFactory.getLogger(JsonWriter.class);
	/** By default, enums are serialzied as name=value pairs */
	public static final boolean ENUM_AS_BEAN_DEFAULT = false;
	private boolean enumAsBean = ENUM_AS_BEAN_DEFAULT;
	private boolean ignoreHierarchy = true;
	static char[] hex = "0123456789ABCDEF".toCharArray();
	private StringBuilder buf = new StringBuilder();
	private Object root;
	private String exprStack = "";
	private boolean buildExpr = true;
	private Collection<Pattern> excludeProperties;
	private Stack stack = new Stack();

	public String write(Object jsonRoot, Object recordRoot, String records,
			String fields, String id, String total,
			Collection<Pattern> excludeProperties) throws JSONException {
		this.buf.setLength(0);
		this.root = jsonRoot;
		this.exprStack = "";
		this.buildExpr = (excludeProperties != null)
				&& !excludeProperties.isEmpty();
		this.excludeProperties = excludeProperties;
		this.value(jsonRoot, null);

		if (fields != null && records != null) {
			deleteLast(buf, '}');
			if (buf.length() > 1) {
				buf.append(",");
			}
			if (recordRoot instanceof Pagination) {
				Pagination page = (Pagination) recordRoot;
				serializeList(records, fields, id, total, page.getTotalCount(),
						page.getList());
			} else if (recordRoot instanceof List) {
				List list = (List) recordRoot;
				serializeList(records, fields, id, total, list.size(), list);
			} else {
				buf.append('"').append(records).append("\":");
				serializeBean(recordRoot, fields, id);
			}
			buf.append('}');
		} else if (fields != null && records == null
				&& recordRoot instanceof List) {
			buf.setLength(0);
			List list = (List) recordRoot;
			serializeList(records, fields, id, total, list.size(), list);
		} else {
		}
		return this.buf.toString();
	}

	private void serializeList(String records, String fields, String id,
			String total, long totalCount, List list) {
		if (total != null) {
			buf.append('"').append(total).append("\":").append(totalCount)
					.append(',');
		}
		if (records != null) {
			buf.append('"').append(records).append("\":[");
		} else {
			buf.append('[');
		}
		for (Object bean : list) {
			serializeBean(bean, fields, id);
			buf.append(",");
		}
		deleteLast(buf, ',');
		buf.append("]");
	}

	private void serializeBean(Object bean, String fields, String id) {
		buf.append('{');
		if (id != null) {
			process(bean, id);
		}
		String[] nameValue = null;
		for (String field : fields.split(",")) {
			nameValue = field.split(":");
			if (nameValue.length > 1) {
				process(bean, nameValue[0], nameValue[1]);
			} else {
				process(bean, nameValue[0]);
			}
		}
		deleteLast(buf, ',');
		buf.append('}');
	}

	private void process(Object root, String field) {
		process(root, field, field);
	}

	private void process(Object root, String name, String field) {
		try {
			Object o = PropertyUtils.getNestedProperty(root, field);
			buf.append('"').append(name).append("\":");
			if (o instanceof String) {
				string(o);
			} else if (o instanceof Date) {
				date((Date) o);
			} else {
				buf.append(o);
			}
			buf.append(",");
		} catch (Exception e) {
			log.warn("field '" + field + "' not exist in "
					+ root.getClass().getName());
		}
	}

	private StringBuilder deleteLast(StringBuilder buf, char match) {
		if (buf.charAt(buf.length() - 1) == match) {
			buf.deleteCharAt(buf.length() - 1);
		}
		return buf;
	}

	private void value(Object object, Method method) throws JSONException {
		if (object == null) {
			this.add("null");
			return;
		}
		if (this.stack.contains(object)) {
			Class clazz = object.getClass();
			// cyclic reference
			if (clazz.isPrimitive() || clazz.equals(String.class)) {
				this.process(object, method);
			} else {
				if (log.isDebugEnabled()) {
					log.debug("Cyclic reference detected on " + object);
				}
				this.add("null");
			}
			return;
		}
		this.process(object, method);
	}

	/**
	 * Add object to buffer
	 */
	private void add(Object obj) {
		this.buf.append(obj);
	}

	/**
	 * Add char to buffer
	 */
	private void add(char c) {
		this.buf.append(c);
	}

	/**
	 * Serialize object into json
	 */
	private void process(Object object, Method method) throws JSONException {
		this.stack.push(object);

		if (object instanceof Class) {
			this.string(object);
		} else if (object instanceof Boolean) {
			this.bool(((Boolean) object).booleanValue());
		} else if (object instanceof Number) {
			this.add(object);
		} else if (object instanceof String) {
			this.string(object);
		} else if (object instanceof Character) {
			this.string(object);
		} else if (object instanceof Map) {
			this.map((Map) object, method);
		} else if (object.getClass().isArray()) {
			this.array(object, method);
		} else if (object instanceof Iterable) {
			this.array(((Iterable) object).iterator(), method);
		} else if (object instanceof Date) {
			this.date((Date) object);
		} else if (object instanceof Calendar) {
			this.date(((Calendar) object).getTime());
		} else if (object instanceof Enum) {
			this.enumeration((Enum) object);
		} else {
			this.bean(object);
		}

		this.stack.pop();
	}

	/**
	 * escape characters
	 */
	private void string(Object obj) {
		this.add('"');

		CharacterIterator it = new StringCharacterIterator(obj.toString());

		for (char c = it.first(); c != CharacterIterator.DONE; c = it.next()) {
			if (c == '"') {
				this.add("\\\"");
			} else if (c == '\\') {
				this.add("\\\\");
			} else if (c == '/') {
				this.add("\\/");
			} else if (c == '\b') {
				this.add("\\b");
			} else if (c == '\f') {
				this.add("\\f");
			} else if (c == '\n') {
				this.add("\\n");
			} else if (c == '\r') {
				this.add("\\r");
			} else if (c == '\t') {
				this.add("\\t");
			} else if (Character.isISOControl(c)) {
				this.unicode(c);
			} else {
				this.add(c);
			}
		}

		this.add('"');
	}

	private void bool(boolean b) {
		this.add(b ? "true" : "false");
	}

	/**
	 * Add map to buffer
	 */
	private void map(Map map, Method method) throws JSONException {
		this.add("{");

		Iterator it = map.entrySet().iterator();

		boolean hasData = false;
		while (it.hasNext()) {
			Map.Entry entry = (Map.Entry) it.next();
			Object key = entry.getKey();
			String expr = null;
			if (this.buildExpr) {
				if (key == null) {
					log.error("Cannot build expression for null key in "
							+ this.exprStack);
					continue;
				} else {
					expr = this.expandExpr(key.toString());
					if (this.shouldExcludeProperty(expr)) {
						continue;
					}
					expr = this.setExprStack(expr);
				}
			}
			if (hasData) {
				this.add(',');
			}
			hasData = true;
			this.value(key, method);
			this.add(":");
			this.value(entry.getValue(), method);
			if (this.buildExpr) {
				this.setExprStack(expr);
			}
		}

		this.add("}");
	}

	/**
	 * Add date to buffer
	 */
	private void date(Date date) {
		this.add("new Date(" + date.getTime() + ')');
	}

	/**
	 * Add array to buffer
	 */
	private void array(Iterator it, Method method) throws JSONException {
		this.add("[");

		boolean hasData = false;
		for (int i = 0; it.hasNext(); i++) {
			String expr = null;
			if (this.buildExpr) {
				expr = this.expandExpr(i);
				if (this.shouldExcludeProperty(expr)) {
					continue;
				}
				expr = this.setExprStack(expr);
			}
			if (hasData) {
				this.add(',');
			}
			hasData = true;
			this.value(it.next(), method);
			if (this.buildExpr) {
				this.setExprStack(expr);
			}
		}

		this.add("]");
	}

	/**
	 * Add array to buffer
	 */
	private void array(Object object, Method method) throws JSONException {
		this.add("[");

		int length = Array.getLength(object);

		boolean hasData = false;
		for (int i = 0; i < length; ++i) {
			String expr = null;
			if (this.buildExpr) {
				expr = this.expandExpr(i);
				if (this.shouldExcludeProperty(expr)) {
					continue;
				}
				expr = this.setExprStack(expr);
			}
			if (hasData) {
				this.add(',');
			}
			hasData = true;
			this.value(Array.get(object, i), method);
			if (this.buildExpr) {
				this.setExprStack(expr);
			}
		}

		this.add("]");
	}

	private void enumeration(Enum enumeration) throws JSONException {
		if (enumAsBean) {
			this.bean(enumeration);
		} else {
			this.string(enumeration.name());
		}
	}

	/**
	 * Instrospect bean and serialize its properties
	 */
	private void bean(Object object) throws JSONException {
		this.add("{");

		BeanInfo info;

		try {
			Class clazz = object.getClass();

			info = ((object == this.root) && this.ignoreHierarchy) ? Introspector
					.getBeanInfo(clazz, clazz.getSuperclass())
					: Introspector.getBeanInfo(clazz);

			PropertyDescriptor[] props = info.getPropertyDescriptors();

			boolean hasData = false;
			for (int i = 0; i < props.length; ++i) {
				PropertyDescriptor prop = props[i];
				String name = prop.getName();
				Method accessor = prop.getReadMethod();
				Method baseAccessor = null;
				if (clazz.getName().indexOf("$$EnhancerByCGLIB$$") > -1) {
					try {
						baseAccessor = Class.forName(
								clazz.getName().substring(0,
										clazz.getName().indexOf("$$")))
								.getDeclaredMethod(accessor.getName(),
										accessor.getParameterTypes());
					} catch (Exception ex) {
						log.debug(ex.getMessage());
					}
				} else
					baseAccessor = accessor;

				if (baseAccessor != null) {

					JSON json = baseAccessor.getAnnotation(JSON.class);
					if (json != null) {
						if (!json.serialize())
							continue;
						else if (json.name().length() > 0)
							name = json.name();
					}

					// ignore "class" and others
					if (this.shouldExcludeProperty(clazz, prop)) {
						continue;
					}
					String expr = null;
					if (this.buildExpr) {
						expr = this.expandExpr(name);
						if (this.shouldExcludeProperty(expr)) {
							continue;
						}
						expr = this.setExprStack(expr);
					}
					if (hasData) {
						this.add(',');
					}
					hasData = true;

					Object value = accessor.invoke(object, new Object[0]);
					this.add(name, value, accessor);
					if (this.buildExpr) {
						this.setExprStack(expr);
					}
				}
			}

			// special-case handling for an Enumeration - include the name() as
			// a property */
			if (object instanceof Enum) {
				if (hasData) {
					this.add(',');
				}
				Object value = ((Enum) object).name();
				this.add("_name", value, object.getClass().getMethod("name"));
			}
		} catch (Exception e) {
			throw new JSONException(e);
		}

		this.add("}");
	}

	/**
	 * Represent as unicode
	 * 
	 * @param c
	 *            character to be encoded
	 */
	private void unicode(char c) {
		this.add("\\u");

		int n = c;

		for (int i = 0; i < 4; ++i) {
			int digit = (n & 0xf000) >> 12;

			this.add(hex[digit]);
			n <<= 4;
		}
	}

	private String expandExpr(int i) {
		return this.exprStack + "[" + i + "]";
	}

	private String expandExpr(String property) {
		if (this.exprStack.length() == 0)
			return property;
		return this.exprStack + "." + property;
	}

	/**
	 * Ignore "class" field
	 */
	private boolean shouldExcludeProperty(Class clazz, PropertyDescriptor prop)
			throws SecurityException, NoSuchFieldException {
		String name = prop.getName();

		if (name.equals("class") || name.equals("declaringClass")) {
			return true;
		}

		return false;
	}

	private boolean shouldExcludeProperty(String expr) {
		for (Pattern pattern : this.excludeProperties) {
			if (pattern.matcher(expr).matches()) {
				if (log.isDebugEnabled())
					log.debug("Ignoring property " + expr);
				return true;
			}
		}
		return false;
	}

	private String setExprStack(String expr) {
		String s = this.exprStack;
		this.exprStack = expr;
		return s;
	}

	private void add(String name, Object value, Method method)
			throws JSONException {
		this.add('"');
		this.add(name);
		this.add("\":");
		this.value(value, method);
	}

}

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩三级高清在线| 久久精品免视看| 国产精品456| 亚洲一区二区免费视频| 久久久久久久综合色一本| 在线亚洲一区二区| 国产精品综合在线视频| 亚洲国产欧美日韩另类综合| 欧美国产日本视频| 日韩三区在线观看| 欧美伊人久久久久久午夜久久久久| 国产精品自在在线| 日韩电影在线免费| 亚洲自拍偷拍av| 亚洲国产成人一区二区三区| 欧美大度的电影原声| 欧美日韩在线三级| 91网上在线视频| 粉嫩av亚洲一区二区图片| 美腿丝袜亚洲色图| 午夜欧美大尺度福利影院在线看| 国产精品一区二区男女羞羞无遮挡| 亚洲成人av电影| 亚洲美女屁股眼交3| 国产精品久久久久久久久动漫| 精品国产91九色蝌蚪| 欧美成人a视频| 欧美一区二区三区在线观看视频| 欧美午夜精品久久久久久超碰 | 亚洲日韩欧美一区二区在线| 久久久电影一区二区三区| 日韩一区二区三区四区| 91精品国产黑色紧身裤美女| 欧美性欧美巨大黑白大战| 不卡大黄网站免费看| 国产v日产∨综合v精品视频| 国产精品一二一区| 国产高清不卡二三区| 国产精品资源网| 国产精品亚洲第一区在线暖暖韩国 | 欧美丰满嫩嫩电影| 欧美军同video69gay| 欧美视频一区二| 在线看日本不卡| 欧美日产在线观看| 欧美精品一级二级| 欧美一级一区二区| 精品国产不卡一区二区三区| 久久众筹精品私拍模特| 久久久久久**毛片大全| 国产欧美视频在线观看| 国产精品嫩草影院com| 国产精品高潮久久久久无| 亚洲国产岛国毛片在线| 自拍偷拍亚洲欧美日韩| 亚洲综合在线观看视频| 亚洲第一搞黄网站| 精品一区二区久久久| 国产成人福利片| 99久久夜色精品国产网站| 色狠狠综合天天综合综合| 色噜噜偷拍精品综合在线| 欧美日韩日日骚| 日韩精品在线一区| 国产欧美一区二区精品秋霞影院 | 欧美精品在线观看一区二区| 欧美大片在线观看| 亚洲欧洲在线观看av| 亚洲综合在线电影| 日本不卡视频在线观看| 国产高清成人在线| 欧美性感一类影片在线播放| 日韩精品中文字幕一区| 日韩理论片一区二区| 亚洲午夜久久久久| 极品瑜伽女神91| 94色蜜桃网一区二区三区| 69久久夜色精品国产69蝌蚪网| 久久久夜色精品亚洲| 亚洲精品免费视频| 国模大尺度一区二区三区| k8久久久一区二区三区| 9191精品国产综合久久久久久| 国产在线视视频有精品| 91首页免费视频| 欧美成人三级电影在线| 亚洲日本一区二区| 久久99久久99| 欧美图区在线视频| 中国av一区二区三区| 日本大胆欧美人术艺术动态| 91亚洲精品乱码久久久久久蜜桃| 精品对白一区国产伦| 亚洲国产一区二区a毛片| 国产不卡一区视频| 日韩欧美一区在线| 亚洲另类春色校园小说| 国产精品一区二区三区四区| 欧美福利视频一区| 亚洲乱码中文字幕综合| 国产高清视频一区| 日韩一区二区免费在线电影| 亚洲黄色小视频| 成人动漫一区二区| 欧美精品一区二区蜜臀亚洲| 亚洲成人在线免费| 99视频一区二区| 国产午夜三级一区二区三| 日韩精品亚洲专区| 在线免费观看日本一区| 国产精品乱人伦| 国产精品综合久久| 精品av久久707| 蜜臀91精品一区二区三区| 欧美视频中文字幕| 亚洲美女视频在线| 97超碰欧美中文字幕| 日本一区二区三区dvd视频在线| 麻豆国产精品777777在线| 欧美日韩精品一区二区三区四区| 亚洲激情第一区| 色婷婷激情综合| 亚洲日本在线a| 色综合一个色综合| 亚洲日本韩国一区| av中文字幕一区| 综合久久久久久久| 91亚洲资源网| 亚洲精品国产一区二区三区四区在线| 成人午夜视频福利| 中文av一区二区| 99久久夜色精品国产网站| 亚洲欧美在线观看| 91在线观看免费视频| 自拍偷拍亚洲综合| 91福利视频网站| 亚洲国产精品一区二区www在线| 欧洲一区在线观看| 亚洲成av人片在线观看| 欧美美女网站色| 免费在线观看视频一区| 欧美成人一区二区三区片免费| 狂野欧美性猛交blacked| 欧美成人高清电影在线| 国产激情精品久久久第一区二区| 国产农村妇女毛片精品久久麻豆| 成人精品一区二区三区四区 | 蜜臀av一级做a爰片久久| 91精品国产全国免费观看| 喷白浆一区二区| 久久久久久久网| 不卡高清视频专区| 夜夜爽夜夜爽精品视频| 538在线一区二区精品国产| 麻豆91在线播放| 久久人人超碰精品| av中文字幕不卡| 亚洲国产人成综合网站| 日韩欧美一二区| 国产91在线观看| 亚洲综合色视频| 日韩欧美自拍偷拍| 26uuu色噜噜精品一区| 国产999精品久久| 一区二区三区自拍| 91精品福利在线一区二区三区| 国产在线精品一区二区不卡了| 中文久久乱码一区二区| 欧美亚洲一区二区在线| 捆绑调教美女网站视频一区| 国产精品国产三级国产aⅴ无密码| 欧美色窝79yyyycom| 国产一区二区三区不卡在线观看| 亚洲欧美一区二区久久| 日韩一区二区三区精品视频| 国产成人综合自拍| 亚洲一区二区欧美日韩| 久久久激情视频| 欧美午夜电影一区| 国产精品一区二区在线观看不卡| 亚洲一区在线播放| 久久久国产精品不卡| 精品视频在线免费观看| 成人免费看视频| 免费观看久久久4p| 一区二区三区精品| 久久久影视传媒| 制服丝袜亚洲精品中文字幕| 丁香网亚洲国际| 日产国产欧美视频一区精品| 亚洲视频在线一区观看| 精品国产人成亚洲区| 一本大道综合伊人精品热热| 国产真实乱对白精彩久久| 亚洲国产成人91porn| 国产精品国产精品国产专区不片| 日韩精品在线一区二区| 亚洲影院在线观看| 国产精品国产自产拍高清av| 精品国产亚洲在线|