android自带的JSON比较弱,而net.sf.json那个在android中会不兼容,于是lz开始了寻觅觅中,终于找到一个牛子自己写的解析json和封装json的工具,万谢啊,现在共享出来。
(声明:这不是什么第三方包,这就是一个工具类,tojson()和string2Json()两个方法就可以满足一些基本的需求啦)
复制代码
(声明:这不是什么第三方包,这就是一个工具类,tojson()和string2Json()两个方法就可以满足一些基本的需求啦)
-
import java.lang.reflect.Method;
-
import java.util.Collection;
-
import java.util.Map;
-
import java.util.Set;
-
-
public final class JsonUtil
-
{
-
-
/**
-
* 把对象封装为JSON格式
-
*
-
* @param o
-
* 对象
-
* @return JSON格式
-
*/
-
@SuppressWarnings("unchecked")
-
public static String toJson(final Object o)
-
{
-
if (o == null)
-
{
-
return "null";
-
}
-
if (o instanceof String) //String
-
{
-
return string2Json((String) o);
-
}
-
if (o instanceof Boolean) //Boolean
-
{
-
return boolean2Json((Boolean) o);
-
}
-
if (o instanceof Number) //Number
-
{
-
return number2Json((Number) o);
-
}
-
if (o instanceof Map) //Map
-
{
-
return map2Json((Map<String, 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());
-
}
-
-
/**
-
* 将 String 对象编码为 JSON格式,只需处理好特殊字符
-
*
-
* @param s
-
* String 对象
-
* @return JSON格式
-
*/
-
static String string2Json(final String s)
-
{
-
final StringBuilder sb = new StringBuilder(s.length() + 20);
-
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<String, Object> map)
-
{
-
if (map.isEmpty())
-
{
-
return "{}";
-
}
-
final StringBuilder sb = new StringBuilder(map.size() << 4); //4次方
-
sb.append('{');
-
final Set<String> keys = map.keySet();
-
for (final String key : keys)
-
{
-
final Object value = map.get(key);
-
sb.append('\"');
-
sb.append(key); //不能包含特殊字符
-
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(array.length << 4); //4次方
-
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(array.length << 4);
-
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(array.length << 4);
-
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(array.length << 4);
-
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(array.length << 4);
-
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(array.length << 4);
-
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(array.length << 4);
-
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(array.length << 4);
-
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(methods.length << 4); //4次方
-
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); //不能包含特殊字符
-
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();
-
}
-
}
-
-
private JsonUtil()
-
{
-
}
- }