All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.ajaxjs.keyvalue.MappingJson Maven / Gradle / Ivy

There is a newer version: 1.2.6
Show newest version
package com.ajaxjs.keyvalue;

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;

import com.ajaxjs.util.CommonUtil;

/**
 * 转换 JSON
 * 
 * @author Frank Cheung
 *
 */
public class MappingJson {

	/**
	 * 将 Simple Object 对象转换成 JSON 格式的字符串:JAVA-->JS
	 * 
	 * @param obj 输入数据
	 * @return JSON 字符串
	 */
	public static String stringifySimpleObject(Object obj) {
		if (obj == null)
			return null;

		List arr = new ArrayList<>();
		for (Field field : obj.getClass().getDeclaredFields()) {
			field.setAccessible(true);

			String key = field.getName();
			if (key.indexOf("this$") != -1)
				continue;

			Object _obj = null;
			try {
				_obj = field.get(obj);
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}

			arr.add('\"' + key + "\":" + obj2jsonVaule(_obj));
		}

		return '{' + String.join(",", arr) + '}';
	}

	/**
	 * 输入一个 Map,将其转换为 JSON Str
	 * 
	 * @param map 输入数据
	 * @return JSON 字符串
	 */
	public static String stringifyMap(Map map) {
		if (map == null)
			return null;

		List arr = new ArrayList<>();
		for (String key : map.keySet())
			arr.add('\"' + key + "\":" + obj2jsonVaule(map.get(key)));

		return '{' + String.join(",", arr) + '}';
	}

	/**
	 * 输入一个 List>,将其转换为 JSON Str
	 * 
	 * @param list 输入数据
	 * @return JSON 字符串
	 */
	public static String stringifyListMap(List> list) {
		if (null == list)
			return null;

		String[] str = new String[list.size()];

		for (int i = 0; i < list.size(); i++)
			str[i] = stringifyMap(list.get(i));

		return "[" + String.join(",", str) + "]";
	}

	/**
	 * 输出符合 JSON 要求的值
	 * 
	 * @param value 任意一个 Java 值
	 * @return JSON 形式的值
	 */
	@SuppressWarnings("unchecked")
	public static String obj2jsonVaule(Object value) {

		if (value == null) {
			return "null";
		} else if (value instanceof Double) {
			return value + "";
		} else if (value instanceof Boolean || value instanceof Number) {
			return value.toString();
		} else if (value instanceof Date) {
			return '\"' + CommonUtil.SimpleDateFormatFactory(CommonUtil.commonDateFormat).format((Date) value) + '\"';
		} else if (value instanceof Map) {
			Map map = (Map) value;
			return map.size() == 0 ? "{}" : stringifyMap(map);
		} else if (value instanceof List) {
			List list = (List) value;

			if (list.size() == 0) {
				return "[]";
			} else if (list.get(0) instanceof Integer) {
				List intList = (List) list;
				StringBuilder sb = new StringBuilder();

				for (int i = 0; i < intList.size(); i++) {
					sb.append(intList.get(i));
					if (i != (intList.size() - 1))
						sb.append(", ");
				}

				return '[' + sb.toString() + ']';
			} else if (list.get(0) instanceof String) {
				List strList = (List) list;
				StringBuilder sb = new StringBuilder();

				for (int i = 0; i < strList.size(); i++) {
					sb.append("\"" + strList.get(i) + "\"");
					if (i != (strList.size() - 1))
						sb.append(", ");
				}

				return '[' + sb.toString() + ']';
			} else if (list.get(0) instanceof Map) {
				List> maps = (List>) list;
				StringBuilder sb = new StringBuilder();

				for (int i = 0; i < maps.size(); i++) {
					sb.append(stringifyMap(maps.get(i)));
					if (i != (maps.size() - 1))
						sb.append(", ");
				}
				return '[' + sb.toString() + ']';
			} else {
				// 未知类型数组,
				return "[]";
			}

			// return stringify((Map)value);
		} else if (value.getClass() == int[].class) {
			String[] strs = int_arr2string_arr((int[]) value);
			return '[' + String.join(",", strs) + ']';
		} else if (value instanceof Object[]) {
			Object[] arr = (Object[]) value;
			String[] strs = new String[arr.length];
			int i = 0;

			for (Object _value : arr)
				strs[i++] = obj2jsonVaule(_value); // 递归调用

			return '[' + String.join(",", strs) + ']';
		} else if (value.getClass().getName().contains("BaseModel")) {
			return BeanUtil.beanToJson(value);
		} else { // String
			return '\"' + value.toString().replace("\\", "\\\\").replace("\"", "\\\"").replace("\n", "\\n")
					.replace("\r", "\\r") + '\"';
		}
	}

	/**
	 * 整形数组转换为字符数组 [1, 2, ...] --"1,2,3, ..."
	 * 
	 * @param arr 输入的整形数组
	 * @return 字符数组
	 */
	private static String[] int_arr2string_arr(int[] arr) {
		String[] strs = new String[arr.length];

		for (int i = 0; i < arr.length; i++)
			strs[i] = arr[i] + "";

		return strs;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy