纯绿色 jsonUtil工具
package com.daditech.common.util;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.sql.Date;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
/**
*
* 项目名称:drp <br/>
* 类名称:JsonUtil <br/>
* 类描述: <br/>
* 创建人:ki_tom <br/>
* 创建时间:2013-8-12 下午2:11:24 <br/>
* 修改人:ao.ouyang <br/>
* 修改时间:2014年10月1日11:25:24 <br/>
* @version 1.2
*
*/
public class JsonUtil {
public static final String SEP1 = ":";
public static final String SEP11 = "=";
public static final String SEP2 = ",";
public static boolean isRemoveZeroList;
public static String TimestampPattern = "yyyy-MM-dd HH:mm:ss";
public static String DatePattern = "yyyy-MM-dd HH:mm:ss";
public static boolean isCamelSpelling = true;
/**
*
* @Function string转化为map<String,String> <br/>
* @param mapStr <br/>
* @require <br/>
* @return Map<String,String> <br/>
* @Exception <br/>
* @since version 1.0 <br/>
* 创建人:ki_tom <br/>
* 创建时间:2013-8-12 下午2:11:39 <br/>
* 修改人:ao.ouyang <br/>
* 修改时间:2014年10月1日11:27:00 <br/>
*/
public static Map<String,String> strToMap(String mapStr) {
if (StringUtils.isEmpty(mapStr)) {
return null;
}
mapStr = mapStr.substring(1,mapStr.length()-1).replaceAll("'", "").replace("\"", "");
Map<String,String> map = new HashMap<String,String>();
// 转换为数组
String[] text = mapStr.split("\\" + SEP2);
for (String str : text) {
// 转换key与value的数组
String[] keyText = str.split(str.indexOf(SEP1)!=-1?SEP1:SEP11);
if (keyText.length <= 1) {
continue;
}
String key = keyText[0]; // key
String value = keyText[1]; // value
map.put(key.trim(), value.trim());
}
return map;
}
public static String toJson(Object obj)
{
if(null!=obj){
if(obj instanceof List){
return toJson((List)obj);
}else if(obj instanceof Object[]){
return toJson((Object[])obj);
}else{
toJson(getAttributes(obj));
}
}
return null;
}
public static String toJson(Map map)
{
String result = "";
map = removeListAttr(map);
for(Iterator it = map.keySet().iterator(); it.hasNext();)
{
String name = (String)it.next();
Object value = map.get(name);
if(value == null)
result = (new StringBuilder()).append(result).append("\"").append(name).append("\":null,").toString();
else
if(value instanceof Boolean)
{
Boolean b = (Boolean)value;
result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append(b.toString()).append(",").toString();
} else
if((value instanceof Integer) || (value instanceof Long) || (value instanceof Float) || (value instanceof Double) || (value instanceof Short) || (value instanceof BigInteger) || (value instanceof BigDecimal))
result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append(value.toString()).append(",").toString();
else
if(value instanceof String)
{
String v = (String)value;
v = v.replaceAll("\\\\", "\\\\\\\\");
v = v.replaceAll("\n", "\\\\n");
v = v.replaceAll("\r", "\\\\r");
v = v.replaceAll("\"", "\\\\\"");
v = v.replaceAll("'", "\\\\'");
result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append("\"").append(v).append("\",").toString();
} else
if(value instanceof Date || value instanceof java.util.Date)
{
SimpleDateFormat df = new SimpleDateFormat(DatePattern);
String s = df.format(value);
result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append("\"").append(s).append("\",").toString();
} else
if(value instanceof Timestamp)
{
SimpleDateFormat df = new SimpleDateFormat(TimestampPattern);
Timestamp v = (Timestamp)value;
String s = df.format(new java.util.Date(v.getTime()));
result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append("\"").append(s).append("\",").toString();
} else
if(value instanceof List)
{
String v = toJson((List)value);
result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append(v).append(",").toString();
} else
if(value instanceof Map)
{
Map attr = removeListAttr((Map)value);
result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append(toJson(attr)).append(",").toString();
} else
if(!value.getClass().getName().startsWith("java"))
{
Map attr = getAttributes(value);
attr = removeListAttr(attr);
result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append(toJson(attr)).append(",").toString();
} else
{
result = (new StringBuilder()).append(result).append("\"").append(name).append("\":").append("\"").append(value.toString()).append("\",").toString();
}
}
if(result.length() == 0)
return "{}";
else
return (new StringBuilder()).append("{").append(result.substring(0, result.length() - 1)).append("}").toString();
}
public static String toJson(Object aa[])
{
if(aa.length == 0)
return "[]";
String result = "";
Object arr$[] = aa;
int len$ = arr$.length;
for(int i$ = 0; i$ < len$; i$++)
{
Object obj = arr$[i$];
if(obj==null){
result = (new StringBuilder()).append(result).append("null").append(",").toString();
continue;
}
else if(obj instanceof Map)
{
Map map = (Map)obj;
map = removeListAttr(map);
result = (new StringBuilder()).append(result).append(toJson(map)).append(",").toString();
continue;
}
else if(obj instanceof List)
{
List arr = (List)obj;
result = (new StringBuilder()).append(result).append(toJson(arr)).append(",").toString();
continue;
}
else if (obj instanceof Object[]) {
Object[] arr = (Object[])obj;
result = (new StringBuilder()).append(result).append(toJson(arr)).append(",").toString();
continue;
}
else if(obj instanceof String)
{
result = (new StringBuilder()).append(result).append("\"").append(String.valueOf(obj)).append("\",").toString();
continue;
}
else {
Map attr = getAttributes(obj);
attr = removeListAttr(attr);
result = (new StringBuilder()).append(result).append(toJson(attr)).append(",").toString();
}
}
return (new StringBuilder()).append("[").append(result.substring(0, result.length() - 1)).append("]").toString();
}
public static String toJson(List ll)
{
return ll==null? "[]":toJson(ll.toArray());
}
public static Map getAttributes(Object obj)
{
Class c = obj.getClass();
try
{
Method method = c.getMethod("isProxy", new Class[0]);
Boolean result = (Boolean)method.invoke(obj, new Object[0]);
if(result.booleanValue())
c = c.getSuperclass();
}
catch(Exception e) { }
Map attr = new HashMap();
Field arr$[] = c.getFields();
int len$ = arr$.length;
for(int i$ = 0; i$ < len$; i$++)
{
Field f = arr$[i$];
try
{
Object value = f.get(obj);
attr.put(f.getName(), value);
}
catch(Exception e) { }
}
Method [] arr$2 = c.getDeclaredMethods();
len$ = arr$2.length;
for(int i$ = 0; i$ < len$; i$++)
{
Method m = arr$2[i$];
String mname = m.getName();
if(mname.equals("getClass"))
continue;
String pname;
if(mname.startsWith("get"))
{
pname = mname.substring(3);
if(pname.length() == 1)
pname = isCamelSpelling?
pname.toLowerCase()
:pname;
else
pname = isCamelSpelling?
(new StringBuilder())
.append(pname.substring(0, 1).toLowerCase())
.append(pname.substring(1))
.toString()
:pname;
try
{
Object value = m.invoke(obj, new Object[0]);
attr.put(pname, value);
}
catch(Exception e) { }
continue;
}
if(!mname.startsWith("is"))
continue;
pname = mname.substring(2);
if(pname.length() == 1)
pname = pname.toLowerCase();
else
pname = (new StringBuilder()).append(pname.substring(0, 1).toLowerCase()).append(pname.substring(1)).toString();
try
{
Object value = m.invoke(obj, new Object[0]);
attr.put(pname, value);
}
catch(Exception e) { }
}
return attr;
}
private static Map removeListAttr(Map map)
{
Map newMap = new HashMap();
Iterator i$ = map.entrySet().iterator();
do
{
if(!i$.hasNext())
break;
Object enObj = i$.next();
java.util.Map.Entry en = (java.util.Map.Entry)enObj;
if(isRemoveZeroList&&en.getValue() instanceof List &&((List)en.getValue()).size()==0)
continue;
else
newMap.put((String)en.getKey(), en.getValue());
} while(true);
return newMap;
}
}
纯绿色 jsonUtil工具的更多相关文章
- [Windows] - Windows/Office纯绿色一键激活工具及方法
瘟到死网上有很多一件键激活工具(如KMS),但许多带毒或报毒.这里给出一个纯绿色命令行一键激活,及自已搭建激活服务器的方法. KMS现在算法都是公开的了,可以自行在网上找到,这里不详述. 使用命令行一 ...
- 纯绿色集成环境,可切换180个Mysql、700个PHP版本
测试神器又出新版!功能更强大(目测linux版本也快要出了,拭目以待吧) PHPWAMP8.8.8.8集成环境,目测大概更新如下内容(我也就是大略看了下更新内容) 1.支持自定义设置任意Mysql版本 ...
- 纯JS文本比较工具
前段时间由于工作需要写了一个纯JS文本比较工具 在这里与大家分享下 算法有待优化,还希望大家多多指教 先上效果图: 奉上源码(把源码保存为html格式的文件就可以直接运行了): <!doctyp ...
- 把docker当做绿色打包工具
如题,我只是把docker当成绿色版的各种环境的集成打包工具了 用到了docker的--net=host模式,这个暂时在mac下是有问题的,linux下正常使用,具体docker的网络模式参考这里,此 ...
- 在JAVA中封装JSONUtil工具类及使用
在JAVA中用json-lib-2.3-jdk15.jar包中提供了JSONObject和JSONArray基类,用于JSON的序列化和反序列化的操作.但是我们更习惯将其进一步封装,达到更好的重用. ...
- Kali-linux破解纯文本密码工具mimikatz
mimikatz是一款强大的系统密码破解获取工具.该工具有段时间是作为一个独立程序运行.现在已被添加到Metasploit框架中,并作为一个可加载的Meterpreter模块.当成功的获取到一个远程会 ...
- 利用Jackson封装常用JsonUtil工具类
在日常的项目开发中,接口与接口之间.前后端之间的数据传输一般都是使用JSON格式,那必然会封装一些常用的Json数据转化的工具类,本文讲解下如何利用Jackson封装高复用性的Json转换工具类. 转 ...
- JsonUtil工具类
package comm; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collec ...
- jsonUtil 工具类
package org.konghao.basic.util; import java.io.IOException; import java.io.StringWriter; import com. ...
随机推荐
- 参数关键点和return返回多个(伪多个)值问题
# -*- coding: cp936 -*- #python 27 #xiaodeng #参数关键点和return返回多个(伪多个)值问题 #传递参数的概念: #即:对象作为输入,发送给函数的方式 ...
- java中的 public protected friendly private
1.public:public表明该数据成员.成员函数是对所有用户开放的,所有用户都可以直接进行调用 2.private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直 ...
- 赵雅智_android多线程下载带进度条
progressBar说明 在某些操作的进度中的可视指示器,为用户呈现操作的进度,还它有一个次要的进度条,用来显示中间进度,如在流媒体播放的缓冲区的进度. 一个进度条也可不确定其进度.在不确定模式下, ...
- 解决sitemesh3装饰页面不能使用freemarker标签问题
如题,这个问题其实在sitemesh2中已经很好的解决了,不过在sitemesh3中可能没有解决,所以要自己写代码解决了,下面我先讲下sitemesh2是如何解决的: <servlet> ...
- JavaScript-event参数传递详解
onmouseover="over(event)" onmouseout="out(event)" onclick="change(event)&qu ...
- this.class.getClassLoader().getResourceAsStream与this.class.getResourceAsStream
本文部分转自:http://xixinfei.iteye.com/blog/1256291 this.getClass().getClassLoader().getResource("tem ...
- HDUOJ----4504 威威猫系列故事——篮球梦
威威猫系列故事——篮球梦 Time Limit: 300/100 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
- struts2 xml配置文件配置传参数
传参方式 重定向 第一方式: <action name="search" method="search" class="c ...
- Python学习笔记015——文件file的常规操作之三(标准输入输出文件)
1 标准输入输出文件 在Python中,模块sys中含有标准的输入输出文件 sys.stdin 标准输入方法(一般是键盘) sys.stdout 标准输出方法(到显示器的缓冲输出) sys ...
- Linux内存初始化(一)
一.前言 一直以来,我都非常着迷于两种电影拍摄手法:一种是慢镜头,将每一个细节全方位的展现给观众.另外一种就是快镜头,多半是反应一个时代的变迁,从非常长的时间段中,截取几个典型的snapshot,合成 ...