package com.amssy.core.util;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import
java.sql.Timestamp;
import java.text.SimpleDateFormat;
import
java.util.ArrayList;
import java.util.Collection;
import
java.util.Date;
import java.util.HashMap;
import
java.util.Iterator;
import java.util.List;
import java.util.Map;
import
java.util.Set;
/**
* 转化json数据*
*/
public class JsonUtil
{
/**
*
* @param mapObject
map转化list
* @return
*/
public static List
changeMapToJsonTypeString(Map mapObject){
List<Map> thirdLt
= new ArrayList<Map>();
Iterator<Map.Entry> tt =
mapObject.entrySet().iterator();
while (tt.hasNext())
{
Map testMap = new
HashMap();
Map.Entry entry =
tt.next();
testMap.put("name",
entry.getKey());
testMap.put("value",
entry.getValue());
thirdLt.add(testMap);
}
return
thirdLt;
}
public static String toJson(final Object
o)
{
if (o == null)
{
return
"\"\"";
}
if(o instanceof
Date){
return
date2JSon(o);
}
if(o instanceof
Timestamp){
return
timestamp2JSon(o);
}
if (o instanceof String )
//String
{
return
string2Json((String) o);
}
if( o instanceof
Character){
return
string2Json( String.valueOf(o));
}
if (o instanceof Boolean)
//Boolean
{
return
boolean2Json((Boolean) o);
}
if (o instanceof
BigDecimal) //Boolean
{
return
bigDecimal2Json((BigDecimal) o);
}
if (o instanceof Number)
//Number
{
return
number2Json((Number) o);
}
if (o instanceof Map)
//Map
{
return
map2Json((Map<Object, Object>) o);
}
if (o instanceof Collection)
//List Set
{
return
collection2Json((Collection) o);
}
if (o instanceof Object[])
//对象数组
{
return
array2Json((Object[]) o);
}
if (o
instanceof int[])//基本类型数组
{
return intArray2Json((int[]) o);
}
if (o instanceof
boolean[])//基本类型数组
{
return
booleanArray2Json((boolean[]) o);
}
if (o instanceof
long[])//基本类型数组
{
return
longArray2Json((long[]) o);
}
if (o instanceof
float[])//基本类型数组
{
return
floatArray2Json((float[]) o);
}
if (o instanceof
double[])//基本类型数组
{
return
doubleArray2Json((double[]) o);
}
if (o instanceof
short[])//基本类型数组
{
return
shortArray2Json((short[]) o);
}
if (o instanceof
byte[])//基本类型数组
{
return
byteArray2Json((byte[]) o);
}
if (o instanceof Object)
//保底收尾对象
{
return
object2Json(o);
}
throw new
RuntimeException("不支持的类型: " + o.getClass().getName());
}
private static
String bigDecimal2Json(BigDecimal o) {
o=o.setScale(2, BigDecimal.ROUND_HALF_UP);
return
"\""+String.valueOf(o)+"\"";
}
private static String
timestamp2JSon(Object o) {
if(null==o){
return
"\"\"";
}
SimpleDateFormat formatter = new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return
"\""+formatter.format(o)+"\"";
}
private static String
date2JSon(Object o) {
if(null==o){
return
"\"\"";
}
SimpleDateFormat formatter = new
SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return
"\""+formatter.format(o)+"\"";
}
/**
* 将 String 对象编码为 JSON格式,只需处理好特殊字符
*
* @param s
* String 对象
* @return JSON格式
*/
static String string2Json(final String s)
{
final StringBuilder sb = new StringBuilder();
sb.append(‘\"‘);
for (int i = 0; i <
s.length(); i++)
{
final
char c = s.charAt(i);
switch
(c)
{
case ‘\"‘:
sb.append("\\\"");
break;
case
‘\\‘:
sb.append("\\\\");
break;
case
‘/‘:
sb.append("\\/");
break;
case
‘\b‘:
sb.append("\\b");
break;
case
‘\f‘:
sb.append("\\f");
break;
case
‘\n‘:
sb.append("\\n");
break;
case
‘\r‘:
sb.append("\\r");
break;
case
‘\t‘:
sb.append("\\t");
break;
default:
sb.append(c);
}
}
sb.append(‘\"‘);
return sb.toString();
}
/**
* 将 Number 表示为 JSON格式
*
* @param number
* Number
* @return JSON格式
*/
static String number2Json(final Number
number)
{
return
"\""+number.toString()+"\"";
}
/**
* 将 Boolean 表示为 JSON格式
*
* @param bool
* Boolean
* @return JSON格式
*/
static String boolean2Json(final Boolean
bool)
{
return
"\""+bool.toString()+"\"";
}
/**
* 将 Collection 编码为 JSON
格式 (List,Set)
*
* @param c
* @return
*/
static String collection2Json(final
Collection<Object> c)
{
final Object[] arrObj =
c.toArray();
return
toJson(arrObj);
}
/**
* 将 Map<String,
Object> 编码为 JSON 格式
*
* @param map
* @return
*/
static String
map2Json(final Map<Object, Object> map)
{
if (map.isEmpty())
{
return
"{}";
}
final StringBuilder sb = new
StringBuilder();
sb.append(‘{‘);
final
Set<Object> keys = map.keySet();
for (final Object key :
keys)
{
final
Object value = map.get(key);
sb.append(‘\"‘);
sb.append(String.valueOf(key).toUpperCase()); //不能包含特殊字符
sb.append(‘\"‘);
sb.append(‘:‘);
sb.append(toJson(value)); //循环引用的对象会引发无限递归
sb.append(‘,‘);
}
// 将最后的 ‘,‘ 变为 ‘}‘:
sb.setCharAt(sb.length() - 1,
‘}‘);
return
sb.toString();
}
/**
* 将数组编码为 JSON 格式
*
* @param array
* 数组
* @return JSON 格式
*/
static String array2Json(final Object[]
array)
{
if (array.length == 0)
{
return
"[]";
}
final StringBuilder sb = new
StringBuilder();
sb.append(‘[‘);
for (final
Object o : array)
{
sb.append(toJson(o));
sb.append(‘,‘);
}
// 将最后添加的 ‘,‘ 变为 ‘]‘:
sb.setCharAt(sb.length() - 1,
‘]‘);
return
sb.toString();
}
static String intArray2Json(final int[] array)
{
if
(array.length == 0)
{
return
"[]";
}
final StringBuilder sb = new
StringBuilder();
sb.append(‘[‘);
for (final
int o : array)
{
sb.append("\""+Integer.toString(o)+"\"");
sb.append(‘,‘);
}
// set last ‘,‘ to ‘]‘:
sb.setCharAt(sb.length() - 1,
‘]‘);
return
sb.toString();
}
static String longArray2Json(final long[] array)
{
if
(array.length == 0)
{
return
"[]";
}
final StringBuilder sb = new
StringBuilder();
sb.append(‘[‘);
for (final
long o : array)
{
sb.append("\""+Long.toString(o)+"\"");
sb.append(‘,‘);
}
// set last ‘,‘ to ‘]‘:
sb.setCharAt(sb.length() - 1,
‘]‘);
return
sb.toString();
}
static String booleanArray2Json(final boolean[]
array)
{
if (array.length == 0)
{
return
"[]";
}
final StringBuilder sb = new
StringBuilder();
sb.append(‘[‘);
for (final
boolean o : array)
{
sb.append("\""+Boolean.toString(o)+"\"");
sb.append(‘,‘);
}
// set last ‘,‘ to ‘]‘:
sb.setCharAt(sb.length() - 1,
‘]‘);
return
sb.toString();
}
static String floatArray2Json(final float[] array)
{
if
(array.length == 0)
{
return
"[]";
}
final StringBuilder sb = new
StringBuilder();
sb.append(‘[‘);
for (final
float o : array)
{
sb.append("\""+Float.toString(o)+"\"");
sb.append(‘,‘);
}
// set last ‘,‘ to ‘]‘:
sb.setCharAt(sb.length() - 1,
‘]‘);
return
sb.toString();
}
static String doubleArray2Json(final double[]
array)
{
if (array.length == 0)
{
return
"[]";
}
final StringBuilder sb = new
StringBuilder();
sb.append(‘[‘);
for (final
double o : array)
{
sb.append("\""+Double.toString(o)+"\"");
sb.append(‘,‘);
}
// set last ‘,‘ to ‘]‘:
sb.setCharAt(sb.length() - 1,
‘]‘);
return
sb.toString();
}
static String shortArray2Json(final short[] array)
{
if
(array.length == 0)
{
return
"[]";
}
final StringBuilder sb = new
StringBuilder();
sb.append(‘[‘);
for (final
short o : array)
{
sb.append("\""+Short.toString(o)+"\"");
sb.append(‘,‘);
}
// set last ‘,‘ to ‘]‘:
sb.setCharAt(sb.length() - 1,
‘]‘);
return
sb.toString();
}
static String byteArray2Json(final byte[] array)
{
if
(array.length == 0)
{
return
"[]";
}
final StringBuilder sb = new
StringBuilder();
sb.append(‘[‘);
for (final
byte o : array)
{
sb.append("\""+Byte.toString(o)+"\"");
sb.append(‘,‘);
}
// set last ‘,‘ to ‘]‘:
sb.setCharAt(sb.length() - 1,
‘]‘);
return
sb.toString();
}
public static String object2Json(final Object bean)
{
//数据检查
if (bean ==
null)
{
return
"{}";
}
final Method[] methods =
bean.getClass().getMethods(); //方法数组
final StringBuilder sb = new
StringBuilder();
sb.append(‘{‘);
for (final Method method : methods)
{
try
{
final String name = method.getName();
String key = "";
if (name.startsWith("get"))
{
key = name.substring(3);
//防死循环
final String[] arrs =
{ "Class" };
boolean bl = false;
for (final String s : arrs)
{
if (s.equals(key))
{
bl = true;
continue;
}
}
if (bl)
{
continue; //防死循环
}
}
else if (name.startsWith("is"))
{
key = name.substring(2);
}
if (key.length() > 0 && Character.isUpperCase(key.charAt(0))
&& method.getParameterTypes().length == 0)
{
if (key.length() == 1)
{
key = key.toLowerCase();
}
else if (!Character.isUpperCase(key.charAt(1)))
{
key = key.substring(0, 1).toLowerCase() + key.substring(1);
}
final Object elementObj = method.invoke(bean);
//System.out.println("###" + key + ":" + elementObj.toString());
sb.append(‘\"‘);
sb.append(key.toUpperCase()); //不能包含特殊字符
sb.append(‘\"‘);
sb.append(‘:‘);
sb.append(toJson(elementObj)); //循环引用的对象会引发无限递归
sb.append(‘,‘);
}
}
catch (final Exception e)
{
//e.getMessage();
throw new RuntimeException("在将bean封装成JSON格式时异常:" + e.getMessage(), e);
}
}
if (sb.length() == 1)
{
return
bean.toString();
}
else
{
sb.setCharAt(sb.length() - 1, ‘}‘);
return
sb.toString();
}
}
}