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

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

?? jsonwriter.java

?? JAVA做的CMS源碼
?? 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一区二区三区免费野_久草精品视频
在线精品国精品国产尤物884a| 色婷婷亚洲综合| 中文字幕中文乱码欧美一区二区| 欧美日韩综合在线免费观看| 国产激情视频一区二区在线观看 | 欧美另类高清zo欧美| 国产精品亚洲人在线观看| 亚洲国产欧美在线| 国产精品美女一区二区三区| 日韩欧美一区在线| 欧美亚洲动漫制服丝袜| 成人av网站免费观看| 韩国精品久久久| 日本va欧美va欧美va精品| 一区二区三区资源| 国产精品成人免费| 国产欧美日韩综合| 久久亚洲一区二区三区四区| 在线综合视频播放| 欧美日韩免费一区二区三区视频| 成人国产精品免费观看动漫| 国内欧美视频一区二区| 琪琪一区二区三区| 婷婷一区二区三区| 婷婷夜色潮精品综合在线| 有坂深雪av一区二区精品| 国产精品第13页| 国产精品电影一区二区三区| 国产欧美精品一区二区色综合朱莉| 欧美一卡在线观看| 欧美一卡二卡在线观看| 91麻豆精品国产91久久久资源速度 | 亚洲精品国产无天堂网2021| 亚洲国产精品激情在线观看| 久久久久久久久久久久久久久99| 日韩你懂的电影在线观看| 91.麻豆视频| 91精品一区二区三区在线观看| 欧美亚洲免费在线一区| 欧美日韩国产综合视频在线观看| 欧美三级日韩三级国产三级| 欧美三级电影网| 51精品国自产在线| 日韩精品专区在线| 久久伊人中文字幕| 国产女主播视频一区二区| 国产精品丝袜一区| 综合久久久久久| 一区二区三区国产精华| 亚洲一级片在线观看| 丝袜亚洲另类欧美| 久久国产精品无码网站| 久久精品二区亚洲w码| 精品一区二区日韩| 丁香一区二区三区| 97se狠狠狠综合亚洲狠狠| 91成人看片片| 91精品国产一区二区三区| 欧美不卡在线视频| 中文字幕欧美区| 亚洲国产欧美日韩另类综合| 婷婷激情综合网| 国产一区二区三区美女| 波多野结衣91| 欧美视频中文字幕| 欧美va亚洲va在线观看蝴蝶网| 国产亚洲精久久久久久| 成人欧美一区二区三区1314| 亚洲一区二区三区视频在线播放| 日韩av一区二区三区| 国产99久久久国产精品| 欧美性猛交xxxx黑人交| 日韩精品一区二区在线| 自拍偷拍亚洲激情| 免费看黄色91| 91在线国产观看| 日韩女优毛片在线| 亚洲美女电影在线| 久久精品国产精品青草| 91日韩精品一区| 91精品国产91久久久久久最新毛片 | 99久久久久免费精品国产| 5858s免费视频成人| 日本一区二区久久| 蜜臀99久久精品久久久久久软件| 福利视频网站一区二区三区| 欧美日韩成人激情| 中文字幕亚洲区| 蜜桃精品视频在线| 欧美在线免费播放| 国产日韩欧美综合在线| 日韩高清一区在线| 色综合欧美在线| 久久久不卡网国产精品二区| 亚洲国产综合色| 福利电影一区二区| 日韩视频免费观看高清在线视频| 亚洲人成在线播放网站岛国| 国内精品视频666| 欧美日韩1234| 亚洲色欲色欲www在线观看| 国产自产v一区二区三区c| 欧美日韩一级片在线观看| 国产精品成人一区二区三区夜夜夜| 麻豆精品精品国产自在97香蕉| 91激情在线视频| 国产精品卡一卡二卡三| 国产精品综合一区二区| 欧美一区二区黄色| 亚洲成av人**亚洲成av**| 色综合中文字幕国产| 久久久久久夜精品精品免费| 午夜不卡av免费| 在线一区二区三区做爰视频网站| 国产日韩精品久久久| 精品中文av资源站在线观看| 7777精品伊人久久久大香线蕉超级流畅| 亚洲婷婷国产精品电影人久久| 国产成人夜色高潮福利影视| 久久综合中文字幕| 麻豆成人免费电影| 日韩视频一区二区在线观看| 日韩成人一区二区| 欧美精品三级日韩久久| 五月婷婷另类国产| 欧美日韩亚洲丝袜制服| 亚洲高清中文字幕| 欧美日韩一二区| 亚洲二区视频在线| 欧美日韩国产123区| 午夜精品久久久久久久99水蜜桃 | 精品国产一区二区精华| 欧美a一区二区| 91精品国产91久久久久久一区二区 | 亚洲桃色在线一区| 波多野结衣欧美| 亚洲丝袜精品丝袜在线| 91免费看`日韩一区二区| 综合在线观看色| 色哟哟一区二区| 午夜精品免费在线观看| 欧美二区三区的天堂| 乱一区二区av| 国产亚洲综合在线| 国产91丝袜在线播放| 中文字幕一区二区三区不卡| www.亚洲激情.com| 亚洲精品菠萝久久久久久久| 色菇凉天天综合网| 日韩精品三区四区| 精品久久久久久久久久久久久久久久久| 久久精品国产免费看久久精品| 久久久亚洲高清| av在线一区二区| 香蕉av福利精品导航| 欧美成人女星排行榜| 福利电影一区二区三区| 亚洲男同1069视频| 欧美一区二区视频在线观看2022| 久久精品国产99国产精品| 国产三级欧美三级日产三级99 | 欧美三片在线视频观看 | 99re在线视频这里只有精品| 亚洲国产精品影院| 欧美大片在线观看一区| 国产99一区视频免费| 亚洲综合丝袜美腿| 日韩女优电影在线观看| 99这里都是精品| 日韩精品久久理论片| ww亚洲ww在线观看国产| av午夜精品一区二区三区| 性久久久久久久| 国产午夜精品在线观看| 欧美视频日韩视频| 国产精品 欧美精品| 亚洲一区二区影院| 久久精品一区二区三区四区| 在线观看日韩国产| 国产一区二区看久久| 亚洲综合色丁香婷婷六月图片| 精品日韩在线一区| 日本精品视频一区二区三区| 久草热8精品视频在线观看| 成人欧美一区二区三区在线播放| 欧美一区二区在线免费观看| 成人18视频日本| 久久99最新地址| 亚洲综合999| 国产精品视频观看| 欧美大胆一级视频| 欧美三级午夜理伦三级中视频| 国产高清无密码一区二区三区| 午夜精品一区二区三区三上悠亚| 日本一区二区免费在线观看视频 | 日韩毛片精品高清免费| 日韩女优av电影| 欧美日韩成人在线一区| caoporm超碰国产精品| 九九国产精品视频|