- 浏览: 1336145 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (471)
- 原创文章 (4)
- Database (84)
- J2SE (63)
- Web (26)
- Javascript (30)
- Lucene (11)
- os (13)
- 算法 (8)
- Webservice (1)
- Open projects (18)
- Hibernate (18)
- Spring (15)
- Css (2)
- J2ee (2)
- 综合技术 (18)
- 安全管理 (13)
- PatternsInJava (27)
- NIO (5)
- Ibatis (2)
- 书籍收藏 (1)
- quartz (7)
- 并发编程 (15)
- oracle问题 (2)
- ios (60)
- coco2d-iphone (3)
- C++ (6)
- Zookeeper (2)
- golang (4)
- animation (2)
- android (1)
最新评论
-
dandingge123:
【引用】限制UITextField输入长度的方法 -
qja:
...
对List顺序,逆序,随机排列实例代码 -
安静听歌:
现在在搞这个,,,,,哎~头都大了,,,又freemarker ...
通用大型网站页面静态化解决方案(一) -
springdata-jpa:
java quartz定时任务demo教程源代码下载,地址:h ...
Quartz 配置参考 -
马清天:
[b][/b][list][*]引用[u][/u][/list ...
通用大型网站页面静态化解决方案(一)
写道
/**
* JSON 构造器类,可以将Java对象映射为JSON对象
* @author yyl
* @datetime
* @version
*/
public class JsonBuilder {
//排除的字段
private Set<String> excludeFields = new HashSet<String>();
private static final Object EMPTY_OBJECT_ARRAY[] = new Object[;
public JsonBuilder() {
excludeFields.add("class");
excludeFields.add("declaringClass");
excludeFields.add("metaClass");
}
/**
* 转换成JSON时需要排除的字段
* @param excludes
*/
public void setExcludeFields(String... excludes) {
for (String exclude : excludes) {
excludeFields.add(exclude);
}
}
/**
* 将Java对象转化为JSON对象
* @param obj java对象
* @return js对象
*/
public String encode(Object object) {
return encodeBasic(object);
}
/**
* 将Java对象转化为JSON对象
* @param obj java对象
* @return js对象
*/
private String encodeBasic(Object object) {
// basic
if (object == null) {
return encodeNULL();
} else if (object instanceof String) {
return encodeString((String) object);
} else if (object instanceof Boolean) {
return encodeBoolean((Boolean) object);
} else if (object instanceof Number) {
return encodeNumber((Number) object);
} else if (object instanceof Map) {
return encodeMap((Map) object);
} else if (object instanceof Iterable) {
return encodeIterable((Iterable) object);
} else if (object instanceof Object[]) {// object.getClass().isArray()
return encodeArray((Object[]) object);
} else if (object instanceof java.util.Date) {
return encodeDate((java.util.Date) object);
} else {
Class clazz = object.getClass();
if (clazz.isInterface()) {
return encodeEmpty();
}
if (clazz.isEnum()) {
return encodeEnum((java.lang.Enum) object);
} else {
return encodeAdapter(object);
}
}
}
/**
* 返回一个NULL对象
* @return javascript null对象
*/
private String encodeNULL() {
return "null";
}
/**
* 将Java-String对象转化为JSON对象
* @param string 字符串对象
* @return javascript string对象
*/
private String encodeString(String string) {
StringBuilder sbr = new StringBuilder(string.length() * ;
sbr.append("'");
for (int i = sz = string.length(); i < sz; i++) {
char ch = string.charAt(i);
// handle unicode
if (ch > fff) {
sbr.append("\\u");
sbr.append(hex(ch));
} else if (ch > ff) {
sbr.append("\\u);
sbr.append(hex(ch));
} else if (ch > ) {
sbr.append("\\u);
sbr.append(hex(ch));
} else if (ch < {
switch (ch) {
case '\b':
sbr.append('\\');
sbr.append('b');
break;
case '\n':
sbr.append('\\');
sbr.append('n');
break;
case '\t':
sbr.append('\\');
sbr.append('t');
break;
case '\f':
sbr.append('\\');
sbr.append('f');
break;
case '\r':
sbr.append('\\');
sbr.append('r');
break;
default:
if (ch > f) {
sbr.append("\\u);
sbr.append(hex(ch));
} else {
sbr.append("\\u);
sbr.append(hex(ch));
}
break;
}
} else {
// line.
switch (ch) {
case '\'':
sbr.append('\\');
sbr.append('\'');
break;
case '"':
sbr.append('\\');
sbr.append('"');
break;
case '\\':
sbr.append('\\');
sbr.append('\\');
break;
default:
sbr.append(ch);
break;
}
}
}
sbr.append("'");
return sbr.toString();
}
private String hex(char ch) {
return Integer.toHexString(ch).toUpperCase(Locale.ENGLISH);
}
/**
* 将Java-Boolean对象转化为JSON对象
* @param obj 字符串对象
* @return javascript Boolean对象
*/
private String encodeBoolean(Boolean b) {
return b.toString();
}
/**
* 将Java-Number对象转化为JSON对象
* @param n 数字对象
* @return javascript Number对象
*/
private String encodeNumber(Number n) {
return n.toString();
}
/**
* 将Java-Map对象转化为JSON对象
*
* @param map Map对象
* @return javascript Map对象(简单对象)
*/
private String encodeMap(Map map) {
StringBuilder sbr = new StringBuilder();
sbr.append("{");
boolean isFirst = true;
for (java.util.Iterator it = map.entrySet().iterator(); it.hasNext();) {
if (isFirst) {
isFirst = false;
} else {
sbr.append(",");
}
Map.Entry entry = (Map.Entry) it.next();
sbr.append(encodeBasic(entry.getKey())).append(":").append(encodeBasic(entry.getValue()));
}
sbr.append("}");
return sbr.toString();
}
/**
* 将Java-Iterable对象转化为JSON对象
* @param iterable Iterable对象
* @return javascript Array对象
*/
private String encodeIterable(java.lang.Iterable iterable) {
StringBuilder sbr = new StringBuilder();
sbr.append("[");
int index =
for (java.util.Iterator it = iterable.iterator(); it.hasNext();) {
if ((index++) > {
sbr.append(",");
}
sbr.append(encodeBasic(it.next()));
}
sbr.append("]");
return sbr.toString();
}
/**
* 将Java-数组对象转化为JSON对象
* @param obj 数组对象
* @return javascript Array对象
*/
private String encodeArray(Object[] array) {
StringBuilder sbr = new StringBuilder();
sbr.append("[");
for (int index = index < array.length; index++) {
if (index > {
sbr.append(",");
}
Object o = array[index];
sbr.append(encodeBasic(o));
}
sbr.append("]");
return sbr.toString();
}
/**
* 将Java-Date对象转化为JSON对象
* @param date 日期对象
* @return javascript Date对象
*/
private String encodeDate(java.util.Date date) {
return new StringBuilder().append("new Date(").append(date.getTime()).append(")").toString();
}
/**
* 将Java-Enum对象转化为JSON对象
* @param e 枚举对象
* @return javascript Date对象
*/
private String encodeEnum(java.lang.Enum e) {
return "'" + e.name() + "'";
}
/**
* 返回一个JSON简单对象
* @return javascript 简单对象
*/
private String encodeEmpty() {
return "{}";
}
/**
* 将Java对象转化为JSON对象
* @param object Java对象
* @return 如果适配器能解析,则返回解析后的JSON对象,否则返回一个默认Empty JSON对象
*/
private String encodeAdapter(Object object) {
try {
Map<String, Object> proxy = new HashMap<String, Object>();
Class clazz = object.getClass();
if (clazz == null) {
throw new IllegalArgumentException("No bean class specified");
}
proxy.put("class", clazz.getName());
PropertyDescriptor[] descriptors = null;
try {
descriptors = Introspector.getBeanInfo(clazz).getPropertyDescriptors();
} catch (IntrospectionException e) {
descriptors = new PropertyDescriptor[;
}
for (int i = j = descriptors.length; i < j; i++) {
PropertyDescriptor descriptor = descriptors[i];
String key = descriptor.getName();
//排除的字段
if (excludeFields.contains(key)) {
continue;
}
Method method = descriptor.getReadMethod();
if (descriptor.getReadMethod() != null) {
Class<?> type = descriptor.getPropertyType();
if (type.isEnum()) {
continue;
}
Object value = method.invoke(object, EMPTY_OBJECT_ARRAY);
proxy.put(key, value);
}
}
return encodeMap(proxy);
} catch (Exception ex) {
return encodeEmpty();
}
}
}
* JSON 构造器类,可以将Java对象映射为JSON对象
* @author yyl
* @datetime
* @version
*/
public class JsonBuilder {
//排除的字段
private Set<String> excludeFields = new HashSet<String>();
private static final Object EMPTY_OBJECT_ARRAY[] = new Object[;
public JsonBuilder() {
excludeFields.add("class");
excludeFields.add("declaringClass");
excludeFields.add("metaClass");
}
/**
* 转换成JSON时需要排除的字段
* @param excludes
*/
public void setExcludeFields(String... excludes) {
for (String exclude : excludes) {
excludeFields.add(exclude);
}
}
/**
* 将Java对象转化为JSON对象
* @param obj java对象
* @return js对象
*/
public String encode(Object object) {
return encodeBasic(object);
}
/**
* 将Java对象转化为JSON对象
* @param obj java对象
* @return js对象
*/
private String encodeBasic(Object object) {
// basic
if (object == null) {
return encodeNULL();
} else if (object instanceof String) {
return encodeString((String) object);
} else if (object instanceof Boolean) {
return encodeBoolean((Boolean) object);
} else if (object instanceof Number) {
return encodeNumber((Number) object);
} else if (object instanceof Map) {
return encodeMap((Map) object);
} else if (object instanceof Iterable) {
return encodeIterable((Iterable) object);
} else if (object instanceof Object[]) {// object.getClass().isArray()
return encodeArray((Object[]) object);
} else if (object instanceof java.util.Date) {
return encodeDate((java.util.Date) object);
} else {
Class clazz = object.getClass();
if (clazz.isInterface()) {
return encodeEmpty();
}
if (clazz.isEnum()) {
return encodeEnum((java.lang.Enum) object);
} else {
return encodeAdapter(object);
}
}
}
/**
* 返回一个NULL对象
* @return javascript null对象
*/
private String encodeNULL() {
return "null";
}
/**
* 将Java-String对象转化为JSON对象
* @param string 字符串对象
* @return javascript string对象
*/
private String encodeString(String string) {
StringBuilder sbr = new StringBuilder(string.length() * ;
sbr.append("'");
for (int i = sz = string.length(); i < sz; i++) {
char ch = string.charAt(i);
// handle unicode
if (ch > fff) {
sbr.append("\\u");
sbr.append(hex(ch));
} else if (ch > ff) {
sbr.append("\\u);
sbr.append(hex(ch));
} else if (ch > ) {
sbr.append("\\u);
sbr.append(hex(ch));
} else if (ch < {
switch (ch) {
case '\b':
sbr.append('\\');
sbr.append('b');
break;
case '\n':
sbr.append('\\');
sbr.append('n');
break;
case '\t':
sbr.append('\\');
sbr.append('t');
break;
case '\f':
sbr.append('\\');
sbr.append('f');
break;
case '\r':
sbr.append('\\');
sbr.append('r');
break;
default:
if (ch > f) {
sbr.append("\\u);
sbr.append(hex(ch));
} else {
sbr.append("\\u);
sbr.append(hex(ch));
}
break;
}
} else {
// line.
switch (ch) {
case '\'':
sbr.append('\\');
sbr.append('\'');
break;
case '"':
sbr.append('\\');
sbr.append('"');
break;
case '\\':
sbr.append('\\');
sbr.append('\\');
break;
default:
sbr.append(ch);
break;
}
}
}
sbr.append("'");
return sbr.toString();
}
private String hex(char ch) {
return Integer.toHexString(ch).toUpperCase(Locale.ENGLISH);
}
/**
* 将Java-Boolean对象转化为JSON对象
* @param obj 字符串对象
* @return javascript Boolean对象
*/
private String encodeBoolean(Boolean b) {
return b.toString();
}
/**
* 将Java-Number对象转化为JSON对象
* @param n 数字对象
* @return javascript Number对象
*/
private String encodeNumber(Number n) {
return n.toString();
}
/**
* 将Java-Map对象转化为JSON对象
*
* @param map Map对象
* @return javascript Map对象(简单对象)
*/
private String encodeMap(Map map) {
StringBuilder sbr = new StringBuilder();
sbr.append("{");
boolean isFirst = true;
for (java.util.Iterator it = map.entrySet().iterator(); it.hasNext();) {
if (isFirst) {
isFirst = false;
} else {
sbr.append(",");
}
Map.Entry entry = (Map.Entry) it.next();
sbr.append(encodeBasic(entry.getKey())).append(":").append(encodeBasic(entry.getValue()));
}
sbr.append("}");
return sbr.toString();
}
/**
* 将Java-Iterable对象转化为JSON对象
* @param iterable Iterable对象
* @return javascript Array对象
*/
private String encodeIterable(java.lang.Iterable iterable) {
StringBuilder sbr = new StringBuilder();
sbr.append("[");
int index =
for (java.util.Iterator it = iterable.iterator(); it.hasNext();) {
if ((index++) > {
sbr.append(",");
}
sbr.append(encodeBasic(it.next()));
}
sbr.append("]");
return sbr.toString();
}
/**
* 将Java-数组对象转化为JSON对象
* @param obj 数组对象
* @return javascript Array对象
*/
private String encodeArray(Object[] array) {
StringBuilder sbr = new StringBuilder();
sbr.append("[");
for (int index = index < array.length; index++) {
if (index > {
sbr.append(",");
}
Object o = array[index];
sbr.append(encodeBasic(o));
}
sbr.append("]");
return sbr.toString();
}
/**
* 将Java-Date对象转化为JSON对象
* @param date 日期对象
* @return javascript Date对象
*/
private String encodeDate(java.util.Date date) {
return new StringBuilder().append("new Date(").append(date.getTime()).append(")").toString();
}
/**
* 将Java-Enum对象转化为JSON对象
* @param e 枚举对象
* @return javascript Date对象
*/
private String encodeEnum(java.lang.Enum e) {
return "'" + e.name() + "'";
}
/**
* 返回一个JSON简单对象
* @return javascript 简单对象
*/
private String encodeEmpty() {
return "{}";
}
/**
* 将Java对象转化为JSON对象
* @param object Java对象
* @return 如果适配器能解析,则返回解析后的JSON对象,否则返回一个默认Empty JSON对象
*/
private String encodeAdapter(Object object) {
try {
Map<String, Object> proxy = new HashMap<String, Object>();
Class clazz = object.getClass();
if (clazz == null) {
throw new IllegalArgumentException("No bean class specified");
}
proxy.put("class", clazz.getName());
PropertyDescriptor[] descriptors = null;
try {
descriptors = Introspector.getBeanInfo(clazz).getPropertyDescriptors();
} catch (IntrospectionException e) {
descriptors = new PropertyDescriptor[;
}
for (int i = j = descriptors.length; i < j; i++) {
PropertyDescriptor descriptor = descriptors[i];
String key = descriptor.getName();
//排除的字段
if (excludeFields.contains(key)) {
continue;
}
Method method = descriptor.getReadMethod();
if (descriptor.getReadMethod() != null) {
Class<?> type = descriptor.getPropertyType();
if (type.isEnum()) {
continue;
}
Object value = method.invoke(object, EMPTY_OBJECT_ARRAY);
proxy.put(key, value);
}
}
return encodeMap(proxy);
} catch (Exception ex) {
return encodeEmpty();
}
}
}
发表评论
-
乱七八糟
2011-06-03 17:59 1263你这样做看看:第一步:在v$sqlarea 这视图 ... -
国内外DNS服务器地址列表
2011-04-13 14:20 1470DNS(Domain Name System)是域名解析服务 ... -
J2EE集群原理
2010-12-08 17:36 1170http://blog.csdn.net/wangchengs ... -
HTTP协议状态码的含义
2010-12-05 20:52 1338HTTP协议状态码的含义 ... -
maven环境变量设置
2010-11-15 12:34 10834maven环境变量设置 wondows 一、下载 ... -
memcached demo 应用例子
2010-11-15 12:31 1987Memcached 是一个高性能的分布式内存对象缓存系统 ... -
HTTP 的特性
2010-11-10 11:26 107311.3.1. 用户代理 (User-Age ... -
大型高性能网站的十项规则
2010-11-10 11:25 1104大型高性能网站的十项规则 -
正则表达式入门
2010-10-26 21:40 1186核心提示:正则表达 ... -
Java中使用正则表达式
2010-10-14 16:03 1764最近要在项目中做HTML解 ... -
正则表达式
2010-10-13 13:15 967正则表达式用于字符串 ... -
intellij idea教程
2010-09-05 23:16 24187intellij idea教程 首先我要说一点,在Intel ... -
json 转化
2010-07-17 12:27 1418package com.ijo.demo; public c ... -
电话秘密
2010-05-01 14:40 2192极少人知道的手机的几大隐密功能 1、当不喜欢别人打搅自己的时 ... -
json 无规律数据转换
2010-04-26 23:39 1408写道 public static void main(Str ... -
大道至简 Java 23种模式一点就通
2010-03-24 16:15 1104一、创建型模式 ... -
back
2010-03-16 14:18 1271http://jquery-api-zh-cn.googlec ...
相关推荐
毕设和企业适用springboot企业数据管理平台类及跨境电商管理平台源码+论文+视频
功能说明: 环境说明: 开发软件:VS 2017 (版本2017以上即可,不能低于2017) 数据库:SqlServer2008r2(数据库版本无限制,都可以导入) 开发模式:mvc。。。
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot社交应用平台类及用户数据分析平台源码+论文+视频
大米外贸商城系统 简称damishop 完全开源版,只需做一种语言一键开启全球133中语言自动翻译功能,价格实现自动汇率转换,集成微信支付宝 paypal以及国外主流支付方式,自带文章博客系统。 软件架构 基于MVC+语言包模式,增加控制台,API导入产品方便对接其他系统(带json示例数据)。 使用要求 PHP7.4+ MYSQL5.6+ REDIS(可选) 安装方法 composer install 打开安装向导安装 http://您的域名/install 特色 1、缓存层增加时间与批量like删除 2、API产品导入方便对接其他系统 3、增加控制台命令行,命令行生成语言翻译包 4、后台一键开启自动翻译模式,支持全球133中语言,由于google代理翻译需要收费,这个功能需要付费。 5、可选购物车与ajax修改购物车产品 6、一键结算checkout 7、增加网站前台自定义路由 方便seo 更新日志 v3.9.7 集成鱼码支付接口,方便个人站长即使收款到账使用 v3.9.3 更新内容 1:增加ueditor与旧编辑器切换 2:增加可视化布局插
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot生鲜鲜花类及生物识别平台源码+论文+视频.zip
毕设和企业适用springboot企业健康管理平台类及视觉识别平台源码+论文+视频.zip
毕设和企业适用springboot视频编辑类及餐饮管理平台源码+论文+视频.zip
labview程序代码参考学习使用,希望对你有所帮助。
毕设和企业适用springboot社区物业类及智能仓储平台源码+论文+视频
毕设和企业适用springboot企业知识管理平台类及人工智能医疗平台源码+论文+视频
毕设和企业适用springboot汽车电商类及新闻传播平台源码+论文+视频
毕设和企业适用springboot生鲜鲜花类及全渠道电商平台源码+论文+视频.zip
毕设和企业适用springboot企业数据智能分析平台类及投票平台源码+论文+视频
毕设和企业适用springboot全渠道电商平台类及人工智能客服平台源码+论文+视频
毕设和企业适用springboot企业云存储平台类及AI数据标注平台源码+论文+视频
毕设和企业适用springboot人工智能客服系统类及旅游规划平台源码+论文+视频
毕设和企业适用springboot社交电商类及环境监控平台源码+论文+视频
毕设和企业适用springboot生鲜鲜花类及大数据存储平台源码+论文+视频