1. package com.daditech.common.util;
  2. import java.lang.reflect.Field;
  3. import java.lang.reflect.Method;
  4. import java.math.BigDecimal;
  5. import java.math.BigInteger;
  6. import java.sql.Date;
  7. import java.sql.Timestamp;
  8. import java.text.SimpleDateFormat;
  9. import java.util.HashMap;
  10. import java.util.Iterator;
  11. import java.util.List;
  12. import java.util.Map;
  13. import org.apache.commons.lang.StringUtils;
  14. /**
  15. *
  16. * 项目名称:drp <br/>
  17. * 类名称:JsonUtil <br/>
  18. * 类描述: <br/>
  19. * 创建人:ki_tom <br/>
  20. * 创建时间:2013-8-12 下午2:11:24 <br/>
  21. * 修改人:ao.ouyang <br/>
  22. * 修改时间:2014年10月1日11:25:24 <br/>
  23. * @version 1.2
  24. *
  25. */
  26. public class JsonUtil {
  27. public static final String SEP1 = ":";
  28. public static final String SEP11 = "=";
  29. public static final String SEP2 = ",";
  30. public static boolean isRemoveZeroList;
  31. public static String TimestampPattern = "yyyy-MM-dd HH:mm:ss";
  32. public static String DatePattern = "yyyy-MM-dd HH:mm:ss";
  33. public static boolean isCamelSpelling = true;
  34. /**
  35. *
  36. * @Function string转化为map<String,String> <br/>
  37. * @param mapStr <br/>
  38. * @require <br/>
  39. * @return Map<String,String> <br/>
  40. * @Exception <br/>
  41. * @since  version 1.0 <br/>
  42. * 创建人:ki_tom <br/>
  43. * 创建时间:2013-8-12 下午2:11:39 <br/>
  44. * 修改人:ao.ouyang <br/>
  45. * 修改时间:2014年10月1日11:27:00 <br/>
  46. */
  47. public static Map<String,String> strToMap(String mapStr) {
  48. if (StringUtils.isEmpty(mapStr)) {
  49. return null;
  50. }
  51. mapStr = mapStr.substring(1,mapStr.length()-1).replaceAll("'", "").replace("\"", "");
  52. Map<String,String> map = new HashMap<String,String>();
  53. // 转换为数组
  54. String[] text = mapStr.split("\\" + SEP2);
  55. for (String str : text) {
  56. // 转换key与value的数组
  57. String[] keyText = str.split(str.indexOf(SEP1)!=-1?SEP1:SEP11);
  58. if (keyText.length <= 1) {
  59. continue;
  60. }
  61. String key = keyText[0]; // key
  62. String value = keyText[1]; // value
  63. map.put(key.trim(), value.trim());
  64. }
  65. return map;
  66. }
  67. public static String toJson(Object obj)
  68. {
  69. if(null!=obj){
  70. if(obj instanceof List){
  71. return toJson((List)obj);
  72. }else if(obj instanceof Object[]){
  73. return toJson((Object[])obj);
  74. }else{
  75. toJson(getAttributes(obj));
  76. }
  77. }
  78. return null;
  79. }
  80. public static String toJson(Map map)
  81. {
  82. String result = "";
  83. map = removeListAttr(map);
  84. for(Iterator it = map.keySet().iterator(); it.hasNext();)
  85. {
  86. String name = (String)it.next();
  87. Object value = map.get(name);
  88. if(value == null)
  89. result = (new StringBuilder()).append(result).append("\"").append(name).append("\":null,").toString();
  90. else
  91. if(value instanceof Boolean)
  92. {
  93. Boolean b = (Boolean)value;
  94. result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append(b.toString()).append(",").toString();
  95. } else
  96. if((value instanceof Integer) || (value instanceof Long) || (value instanceof Float) || (value instanceof Double) || (value instanceof Short) || (value instanceof BigInteger) || (value instanceof BigDecimal))
  97. result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append(value.toString()).append(",").toString();
  98. else
  99. if(value instanceof String)
  100. {
  101. String v = (String)value;
  102. v = v.replaceAll("\\\\", "\\\\\\\\");
  103. v = v.replaceAll("\n", "\\\\n");
  104. v = v.replaceAll("\r", "\\\\r");
  105. v = v.replaceAll("\"", "\\\\\"");
  106. v = v.replaceAll("'", "\\\\'");
  107. result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append("\"").append(v).append("\",").toString();
  108. } else
  109. if(value instanceof Date || value instanceof java.util.Date)
  110. {
  111. SimpleDateFormat df = new SimpleDateFormat(DatePattern);
  112. String s = df.format(value);
  113. result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append("\"").append(s).append("\",").toString();
  114. } else
  115. if(value instanceof Timestamp)
  116. {
  117. SimpleDateFormat df = new SimpleDateFormat(TimestampPattern);
  118. Timestamp v = (Timestamp)value;
  119. String s = df.format(new java.util.Date(v.getTime()));
  120. result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append("\"").append(s).append("\",").toString();
  121. } else
  122. if(value instanceof List)
  123. {
  124. String v = toJson((List)value);
  125. result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append(v).append(",").toString();
  126. } else
  127. if(value instanceof Map)
  128. {
  129. Map attr = removeListAttr((Map)value);
  130. result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append(toJson(attr)).append(",").toString();
  131. } else
  132. if(!value.getClass().getName().startsWith("java"))
  133. {
  134. Map attr = getAttributes(value);
  135. attr = removeListAttr(attr);
  136. result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append(toJson(attr)).append(",").toString();
  137. } else
  138. {
  139. result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append("\"").append(value.toString()).append("\",").toString();
  140. }
  141. }
  142. if(result.length() == 0)
  143. return "{}";
  144. else
  145. return (new StringBuilder()).append("{").append(result.substring(0, result.length() - 1)).append("}").toString();
  146. }
  147. public static String toJson(Object aa[])
  148. {
  149. if(aa.length == 0)
  150. return "[]";
  151. String result = "";
  152. Object arr$[] = aa;
  153. int len$ = arr$.length;
  154. for(int i$ = 0; i$ < len$; i$++)
  155. {
  156. Object obj = arr$[i$];
  157. if(obj==null){
  158. result = (new StringBuilder()).append(result).append("null").append(",").toString();
  159. continue;
  160. }
  161. else if(obj instanceof Map)
  162. {
  163. Map map = (Map)obj;
  164. map = removeListAttr(map);
  165. result = (new StringBuilder()).append(result).append(toJson(map)).append(",").toString();
  166. continue;
  167. }
  168. else if(obj instanceof List)
  169. {
  170. List arr = (List)obj;
  171. result = (new StringBuilder()).append(result).append(toJson(arr)).append(",").toString();
  172. continue;
  173. }
  174. else if (obj instanceof Object[]) {
  175. Object[] arr = (Object[])obj;
  176. result = (new StringBuilder()).append(result).append(toJson(arr)).append(",").toString();
  177. continue;
  178. }
  179. else if(obj instanceof String)
  180. {
  181. result = (new StringBuilder()).append(result).append("\"").append(String.valueOf(obj)).append("\",").toString();
  182. continue;
  183. }
  184. else {
  185. Map attr = getAttributes(obj);
  186. attr = removeListAttr(attr);
  187. result = (new StringBuilder()).append(result).append(toJson(attr)).append(",").toString();
  188. }
  189. }
  190. return (new StringBuilder()).append("[").append(result.substring(0, result.length() - 1)).append("]").toString();
  191. }
  192. public static String toJson(List ll)
  193. {
  194. return ll==null? "[]":toJson(ll.toArray());
  195. }
  196. public static Map getAttributes(Object obj)
  197. {
  198. Class c = obj.getClass();
  199. try
  200. {
  201. Method method = c.getMethod("isProxy", new Class[0]);
  202. Boolean result = (Boolean)method.invoke(obj, new Object[0]);
  203. if(result.booleanValue())
  204. c = c.getSuperclass();
  205. }
  206. catch(Exception e) { }
  207. Map attr = new HashMap();
  208. Field arr$[] = c.getFields();
  209. int len$ = arr$.length;
  210. for(int i$ = 0; i$ < len$; i$++)
  211. {
  212. Field f = arr$[i$];
  213. try
  214. {
  215. Object value = f.get(obj);
  216. attr.put(f.getName(), value);
  217. }
  218. catch(Exception e) { }
  219. }
  220. Method [] arr$2 = c.getDeclaredMethods();
  221. len$ = arr$2.length;
  222. for(int i$ = 0; i$ < len$; i$++)
  223. {
  224. Method m = arr$2[i$];
  225. String mname = m.getName();
  226. if(mname.equals("getClass"))
  227. continue;
  228. String pname;
  229. if(mname.startsWith("get"))
  230. {
  231. pname = mname.substring(3);
  232. if(pname.length() == 1)
  233. pname = isCamelSpelling?
  234. pname.toLowerCase()
  235. :pname;
  236. else
  237. pname = isCamelSpelling?
  238. (new StringBuilder())
  239. .append(pname.substring(0, 1).toLowerCase())
  240. .append(pname.substring(1))
  241. .toString()
  242. :pname;
  243. try
  244. {
  245. Object value = m.invoke(obj, new Object[0]);
  246. attr.put(pname, value);
  247. }
  248. catch(Exception e) { }
  249. continue;
  250. }
  251. if(!mname.startsWith("is"))
  252. continue;
  253. pname = mname.substring(2);
  254. if(pname.length() == 1)
  255. pname = pname.toLowerCase();
  256. else
  257. pname = (new StringBuilder()).append(pname.substring(0, 1).toLowerCase()).append(pname.substring(1)).toString();
  258. try
  259. {
  260. Object value = m.invoke(obj, new Object[0]);
  261. attr.put(pname, value);
  262. }
  263. catch(Exception e) { }
  264. }
  265. return attr;
  266. }
  267. private static Map removeListAttr(Map map)
  268. {
  269. Map newMap = new HashMap();
  270. Iterator i$ = map.entrySet().iterator();
  271. do
  272. {
  273. if(!i$.hasNext())
  274. break;
  275. Object enObj = i$.next();
  276. java.util.Map.Entry en = (java.util.Map.Entry)enObj;
  277. if(isRemoveZeroList&&en.getValue() instanceof List &&((List)en.getValue()).size()==0)
  278. continue;
  279. else
  280. newMap.put((String)en.getKey(), en.getValue());
  281. } while(true);
  282. return newMap;
  283. }
  284. }


纯绿色 jsonUtil工具的更多相关文章

  1. [Windows] - Windows/Office纯绿色一键激活工具及方法

    瘟到死网上有很多一件键激活工具(如KMS),但许多带毒或报毒.这里给出一个纯绿色命令行一键激活,及自已搭建激活服务器的方法. KMS现在算法都是公开的了,可以自行在网上找到,这里不详述. 使用命令行一 ...

  2. 纯绿色集成环境,可切换180个Mysql、700个PHP版本

    测试神器又出新版!功能更强大(目测linux版本也快要出了,拭目以待吧) PHPWAMP8.8.8.8集成环境,目测大概更新如下内容(我也就是大略看了下更新内容) 1.支持自定义设置任意Mysql版本 ...

  3. 纯JS文本比较工具

    前段时间由于工作需要写了一个纯JS文本比较工具 在这里与大家分享下 算法有待优化,还希望大家多多指教 先上效果图: 奉上源码(把源码保存为html格式的文件就可以直接运行了): <!doctyp ...

  4. 把docker当做绿色打包工具

    如题,我只是把docker当成绿色版的各种环境的集成打包工具了 用到了docker的--net=host模式,这个暂时在mac下是有问题的,linux下正常使用,具体docker的网络模式参考这里,此 ...

  5. 在JAVA中封装JSONUtil工具类及使用

    在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...

  6. Kali-linux破解纯文本密码工具mimikatz

    mimikatz是一款强大的系统密码破解获取工具.该工具有段时间是作为一个独立程序运行.现在已被添加到Metasploit框架中,并作为一个可加载的Meterpreter模块.当成功的获取到一个远程会 ...

  7. 利用Jackson封装常用JsonUtil工具类

    在日常的项目开发中,接口与接口之间.前后端之间的数据传输一般都是使用JSON格式,那必然会封装一些常用的Json数据转化的工具类,本文讲解下如何利用Jackson封装高复用性的Json转换工具类. 转 ...

  8. JsonUtil工具类

    package comm; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collec ...

  9. jsonUtil 工具类

    package org.konghao.basic.util; import java.io.IOException; import java.io.StringWriter; import com. ...

随机推荐

  1. 参数关键点和return返回多个(伪多个)值问题

    # -*- coding: cp936 -*- #python 27 #xiaodeng #参数关键点和return返回多个(伪多个)值问题 #传递参数的概念: #即:对象作为输入,发送给函数的方式 ...

  2. java中的 public protected friendly private

    1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...

  3. 赵雅智_android多线程下载带进度条

    progressBar说明 在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度. 一个进度条也可不确定其进度.在不确定模式下, ...

  4. 解决sitemesh3装饰页面不能使用freemarker标签问题

    如题,这个问题其实在sitemesh2中已经很好的解决了,不过在sitemesh3中可能没有解决,所以要自己写代码解决了,下面我先讲下sitemesh2是如何解决的: <servlet> ...

  5. JavaScript-event参数传递详解

    onmouseover="over(event)" onmouseout="out(event)" onclick="change(event)&qu ...

  6. this.class.getClassLoader().getResourceAsStream与this.class.getResourceAsStream

    本文部分转自:http://xixinfei.iteye.com/blog/1256291 this.getClass().getClassLoader().getResource("tem ...

  7. HDUOJ----4504 威威猫系列故事——篮球梦

    威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total ...

  8. struts2 xml配置文件配置传参数

    传参方式 重定向 第一方式: <action name="search" method="search"            class="c ...

  9. Python学习笔记015——文件file的常规操作之三(标准输入输出文件)

    1 标准输入输出文件 在Python中,模块sys中含有标准的输入输出文件 sys.stdin     标准输入方法(一般是键盘) sys.stdout   标准输出方法(到显示器的缓冲输出) sys ...

  10. Linux内存初始化(一)

    一.前言 一直以来,我都非常着迷于两种电影拍摄手法:一种是慢镜头,将每一个细节全方位的展现给观众.另外一种就是快镜头,多半是反应一个时代的变迁,从非常长的时间段中,截取几个典型的snapshot,合成 ...