您的位置:首页 > 编程语言 > Java开发

Java中转JSON的工具类

2016-07-01 20:36 477 查看
之前在学习的时候用的是框架自带的转JSON的方法,感觉很不好用,于是自己写了一个,支持List、Map、Set等

package test;
import java.text.SimpleDateFormat;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map.Entry;
import java.util.Set;
import java.lang.reflect.Field;
import java.util.Map;

public class JsonUtils {

/**
* @param obj
* @return
* @throws InstantiationException
* @throws IllegalAccessException
*/
public static String getJsonString(Object obj) throws InstantiationException, IllegalAccessException  {

//如果传入的对象为集合
if (obj instanceof Collection) {

//执行collectionTojson方法将集合类型转为json格式
return collectionTojson(obj);

}

//如果获取的对象类型为一个Map集合
else if (obj instanceof Map) {

//执行mapTojson方法将Map类型转为json格式
return mapTojson(obj);

}

//如果获取的对象类型为普通对象
else{

//执行classTojson方法将普通类型转为json格式
return classTojson(obj);

}
}

/**
* @描述 将集合转为json格式的字符串
* @param obj
* @return
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
private static String collectionTojson(Object obj) throws IllegalArgumentException, IllegalAccessException{

//定义一个StringBuffer类型的字符串
StringBuffer buffer = new StringBuffer();
buffer.append("[");

Class<? extends Object> clazz = obj.getClass();

//获取类中所有的字段
Field[] declaredFields = clazz.getDeclaredFields();

//设置可以获得私有字段的value
Field.setAccessible(declaredFields, true);

//定义全局变量
boolean listf = false;
boolean setf = false;
Set<Object> set = null;
List<Object> list = null;

//遍历获取到的所有字段
for (Field field : declaredFields) {

//getDeclaringClass()同getClasses(),但不局限于public修饰,只要是目标类中声明的内部类和接口均可

String simpleName = clazz.getSimpleName();

//判断获取到的类型
if(simpleName.equals("ArrayList")||simpleName.equals("LinkedList")){
list = (List<Object>) obj;
listf=true;
}
if(simpleName.equals("HashSet")||simpleName.equals("TreeSet")){
set = (Set<Object>) obj;
setf=true;
}

}

//如果获取的对象类型为一个List集合
if(listf == true){

return listTojson(buffer, list).toString();

}

//如果获取的对象类型为一个Set集合
if(setf == true){

buffer = setTojson(set, buffer);

}

buffer.append("]");

return buffer.toString();
}

/**
* 描述 将基本类转为json格式
* @param obj
* @return
*/
private static String classTojson(Object obj){

//通过反射获取到类
Class<? extends Object> clazz = obj.getClass();

//获取类中所有的字段
Field[] fields = clazz.getDeclaredFields();

StringBuffer buffer = new StringBuffer();
buffer.append("[{");

//设置setAccessible方法能获取到类中的私有属性和方法
Field.setAccessible(fields, true);

//遍历所有的方法和属性
for (Field field : fields) {

try {

Object object = field.get(obj);

//获取到该属性对应类型名称
String fieldName = field.getType().getSimpleName();

//如果该属性的值为空
if(object == null){

//根据类型判断追加的值
if(fieldName.equals("String"))
{
buffer.append("\""+field.getName()+"\":\"\",");
}
else if(fieldName.equals("Boolean")||fieldName.equals("Integer")||fieldName.equals("Double")||fieldName.equals("Float")||fieldName.equals("Long")){

buffer.append("\""+field.getName()+"\":0,");
}

else{
buffer.append("\""+field.getName()+"\":null,");
}

}
else{

//获取到该属性的值对应的类
Class<? extends Object> fieldclass = object.getClass();
String simpleName = fieldclass.getSimpleName();

if(simpleName.equals("String")){

buffer.append("\""+field.getName()+"\":\""+field.get(obj)+"\",");

}
else if(simpleName.equals("Boolean")||simpleName.equals("Integer")||simpleName.equals("Double")||simpleName.equals("Float")||simpleName.equals("Long")){

buffer.append("\""+field.getName()+"\":"+field.get(obj)+",");

}
else if(simpleName.equals("Date")){

Date date = (Date) object;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append("\""+field.getName()+"\":\""+simdate+"\",");

}
else if(simpleName.equals("ArrayList")||simpleName.equals("LinkedList"))
{
//将获取到的值强转为list集合
List<Object> list = (List<Object>) object;
buffer.append("\""+field.getName()+"\":[");

//执行listTojson方法将获取到的list转为json格式
buffer = listTojson(buffer, list).append("]");
}
else if(simpleName.equals("HashSet")||simpleName.equals("TreeSet"))
{
//将获取到的值强转为set集合
buffer.append("\""+field.getName()+"\":[");
Set<Object> set = (Set<Object>) object;

//执行setTojson方法将获取到的set转为json格式
buffer = setTojson(set, buffer).append("]");

}
else if(simpleName.equals("HashMap")||simpleName.equals("HashTable"))
{

buffer.append("\""+field.getName()+"\":");

//执行mapTojson方法将获取到的map对象转为json格式
StringBuffer mapbuffer = new StringBuffer(mapTojson(object));
mapbuffer.deleteCharAt(0);
buffer.append(mapbuffer);
}
else{

buffer = beanTojson(object,buffer).append(",");
}
}

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}
buffer = new StringBuffer(buffer.substring(0,buffer.length()-1));
buffer.append("}]");

return buffer.toString();
}

/**
* 描述 将map集合转为json格式
* @param obj
* @return
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
private static String mapTojson(Object obj) throws IllegalArgumentException, IllegalAccessException{

StringBuffer buffer = new StringBuffer();
Class<? extends Object> clazz = obj.getClass();
Field[] declaredFields = clazz.getDeclaredFields();
Field.setAccessible(declaredFields, true);
buffer.append("[");
Map<Object,Object> map = (Map<Object, Object>) obj;

//通过Map.entrySet使用iterator(迭代器)遍历key和value
Set<Entry<Object, Object>> set = map.entrySet();
Iterator iterator = set.iterator();
buffer.append("{");

while (iterator.hasNext()){

//使用Map.Entry接到通过迭代器循环出的set的值
Map.Entry  mapentry = (Map.Entry) iterator.next();
Object value = mapentry.getValue();

//使用getKey()获取map的键,getValue()获取键对应的值
String valuename = value.getClass().getSimpleName();
if(valuename.equals("String")){

buffer.append("\""+mapentry.getKey()+"\":\""+mapentry.getValue()+"\",");
}
else if(valuename.equals("Boolean")||valuename.equals("Integer")||valuename.equals("Double")||valuename.equals("Float")||valuename.equals("Long")){

buffer.append("\""+mapentry.getKey()+"\":"+mapentry.getValue()+",");
}
else if(valuename.equals("Date")){
Date date = (Date) value;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append("\""+mapentry.getKey()+"\":\""+simdate+"\",");
}else if(valuename.equals("ArrayList")||valuename.equals("LinkedList"))
{
List<Object> list = (List<Object>) value;
buffer.append("\""+mapentry.getKey()+"\":[");
buffer = listTojson(buffer, list).append("]");
}
else if(valuename.equals("HashSet")||valuename.equals("TreeSet"))
{
buffer.append("\""+mapentry.getKey()+"\":[");
Set<Object> sets = (Set<Object>) value;
buffer = setTojson(sets, buffer).append("]");
}
else if(valuename.equals("HashMap")||valuename.equals("HashTable"))
{
buffer.append("\""+mapentry.getKey()+"\":");
StringBuffer mapbuffer = new StringBuffer(mapTojson(value));
mapbuffer.deleteCharAt(0);
buffer.append(mapbuffer);
}
else{
buffer.append("\""+mapentry.getKey()+"\":");
buffer.append("{");

Class<? extends Object> class1 = value.getClass();
Field[] fields = class1.getDeclaredFields();
Field.setAccessible(fields, true);

for (Field field : fields) {

Object object = field.get(value);
String fieldName = field.getType().getSimpleName();

if(object == null){
if(fieldName.equals("String"))
{
buffer.append("\""+field.getName()+"\":\"\",");
}

else{
buffer.append("\""+field.getName()+"\":null,");
}

10a98
}
else{

Class<? extends Object> fieldclass = field.get(value).getClass();
String simpleName = fieldclass.getSimpleName();
if(simpleName.equals("String")){

buffer.append("\""+field.getName()+"\":\""+field.get(value)+"\",");
}
else if(simpleName.equals("Boolean")||simpleName.equals("Integer")||simpleName.equals("Double")||simpleName.equals("Float")||simpleName.equals("Long")){

buffer.append("\""+field.getName()+"\":"+field.get(value)+",");
}
else if(simpleName.equals("Date")){
Date date = (Date) object;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append("\""+field.getName()+"\":\""+simdate+"\",");
}
else if(simpleName.equals("ArrayList")||simpleName.equals("LinkedList")){

List<Object> list = (List<Object>) object;
buffer.append("\""+field.getName()+"\":[");
StringBuffer append = listTojson(buffer, list).append("]");
buffer.append(append);
}
else if(simpleName.equals("HashSet")||simpleName.equals("TreeSet")){

buffer.append("\""+field.getName()+"\":[");
Set<Object> sets = (Set<Object>) object;
buffer = setTojson(sets, buffer).append("]");
}
else if(simpleName.equals("HashMap")||simpleName.equals("HashTable")){

buffer.append("\""+field.getName()+"\":");
StringBuffer mapbuffer = new StringBuffer(mapTojson(object));
mapbuffer.deleteCharAt(0);
buffer.append(mapbuffer);
}
else{
buffer = beanTojson(object,buffer).append(",");

}
}

}

buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
buffer.append("},");
}

}

buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
return buffer.toString()+"}]";
}

/**
* @描述 将不是基本类型的字段转为json格式
* @param obj
* @param buffer
* @return
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
private static StringBuffer beanTojson(Object obj,StringBuffer buffer) throws IllegalArgumentException, IllegalAccessException{

Class<? extends Object> clazz = obj.getClass();
Field[] declaredFields = clazz.getDeclaredFields();
Field.setAccessible(declaredFields, true);

buffer.append("\""+clazz.getSimpleName()+"\":{");

for (Field field : declaredFields) {

Object object = field.get(obj);
String fieldName = field.getType().getSimpleName();

if(object == null){
if(fieldName.equals("String"))
{
buffer.append("\""+field.getName()+"\":\"\",");
}

else{
buffer.append("\""+field.getName()+"\":null,");
}

}
else{

Class<? extends Object> fieldclass = object.getClass();
String simpleName = fieldclass.getSimpleName();

if(simpleName.equals("String")){

buffer.append("\""+field.getName()+"\":\""+field.get(obj)+"\",");
}
else if(simpleName.equals("Boolean")||simpleName.equals("Integer")||simpleName.equals("Double")||simpleName.equals("Float")||simpleName.equals("Long")){

buffer.append("\""+field.getName()+"\":"+field.get(obj)+",");
}
else if(simpleName.equals("Date")){

Date date = (Date) object;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append("\""+field.getName()+"\":\""+simdate+"\",");
}
else if(simpleName.equals("ArrayList")||simpleName.equals("LinkedList")){

List<Object> list = (List<Object>) object;
buffer = listTojson(buffer, list);
}
else if(simpleName.equals("HashSet")||simpleName.equals("TreeSet")){

Set<Object> set = (Set<Object>) object;
buffer = setTojson(set, buffer);
}
else if(simpleName.equals("HashMap")||simpleName.equals("HashTable")){

buffer.append("\""+field.getName()+"\":");
StringBuffer mapbuffer = new StringBuffer(mapTojson(object));
mapbuffer.deleteCharAt(0);
buffer.append(mapbuffer);
}
else{
buffer = beanTojson(object,buffer).append("}");
}
}

}

buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
buffer.append("}");

return buffer;
}

/**
* @描述 将list数组转为json格式
* @param buffer
* @param list
* @return
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
private static StringBuffer listTojson(StringBuffer buffer,List list) throws IllegalArgumentException, IllegalAccessException{

//遍历传过来的list数组
for (Object object : list) {

//判断遍历出的值是否为空
if (object == null) {
buffer.append(",");
}
else{

Class<? extends Object> class1 = object.getClass();
String simpleName = class1.getSimpleName();

if(simpleName.equals("String")){

buffer.append("\""+object.toString()+"\",");
}
else if(simpleName.equals("Boolean")||simpleName.equals("Integer")||simpleName.equals("Double")||simpleName.equals("Float")||simpleName.equals("Long")){

buffer.append(""+object.toString()+",");
}
else if(simpleName.equals("Date")){
Date date = (Date) object;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append(""+simdate+",");
}
else{

Class<? extends Object> class2 = object.getClass();
Field[] fields = class2.getDeclaredFields();
Field.setAccessible(fields, true);
buffer.append("{");
//遍历对象中的所有字段获取字段值和字段名称拼成json字符串
for (Field field : fields) {

Object fieldobj = field.get(object);
String fieldName = field.getType().getSimpleName();

if(fieldobj == null){

if(fieldName.equals("String"))
{
buffer.append("\""+field.getName()+"\":\"\",");
}

else{
buffer.append("\""+field.getName()+"\":null,");
}

}

else{

String fsimpleName = fieldobj.getClass().getSimpleName();

if(fsimpleName.equals("String")){

buffer.append("\""+field.getName()+"\":\""+field.get(object)+"\",");
}
else if(fsimpleName.equals("Boolean")||fsimpleName.equals("Integer")||fsimpleName.equals("Double")||fsimpleName.equals("Float")||fsimpleName.equals("Long")){

buffer.append("\""+field.getName()+"\":"+field.get(object)+",");
}
else if(fsimpleName.equals("Date")){

Date date = (Date) object;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append("\""+field.getName()+"\":"+simdate+",");
}
else{

buffer = beanTojson(fieldobj, buffer).append(",");
}
}

}

buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
buffer.append("},");
}
}

}

buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
buffer.append("]");

return buffer;
}

/**
* @描述 将set数组转为json格式
* @param set
* @param buffer
* @return
* @throws IllegalArgumentException
* @throws IllegalAccessException
*/
private static StringBuffer setTojson(Set set,StringBuffer buffer) throws IllegalArgumentException, IllegalAccessException{

for (Object object : set) {
if (object == null) {
buffer.append(""+"null"+",");
}
else{

Class<? extends Object> class1 = object.getClass();

//判断集合中的值是否为java基本类型
String simpleName = class1.getSimpleName();
if(simpleName.equals("String")){

buffer.append("\""+object.toString()+"\",");
}
else if(simpleName.equals("Boolean")||simpleName.equals("Integer")||simpleName.equals("Double")||simpleName.equals("Float")||simpleName.equals("Long")){

buffer.append(""+object.toString()+",");
}
else if(simpleName.equals("Date")){

Date date = (Date) object;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append(""+simdate+",");
}
else{

Class<? extends Object> class2 = object.getClass();
Field[] fields = class2.getDeclaredFields();
Field.setAccessible(fields, true);
buffer.append("{");

//遍历对象中的所有字段获取字段值和字段名称拼成json字符串
for (Field field : fields) {

Object fieldobj = field.get(object);
String fieldName = field.getType().getSimpleName();

if(object == null){
if(fieldName.equals("String"))
{
buffer.append("\""+field.getName()+"\":\"\",");
}

else{
buffer.append("\""+field.getName()+"\":null,");
}

}
else{

String fsimpleName = fieldobj.getClass().getSimpleName();
if(fsimpleName.equals("String")){

buffer.append("\""+field.getName()+"\":\""+field.get(object)+"\",");
}
else if(fsimpleName.equals("Boolean")||fsimpleName.equals("Integer")||fsimpleName.equals("Double")||fsimpleName.equals("Float")||fsimpleName.equals("Long")){

buffer.append("\""+field.getName()+"\":"+field.get(object)+",");
}
else if(fsimpleName.equals("Date")){

Date date = (Date) object;
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String simdate = simpleDateFormat.format(date);
buffer.append("\""+field.getName()+"\":"+simdate+",");
}
else{

buffer = beanTojson(fieldobj, buffer).append(",");
}
}
}

buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
buffer.append("},");
}
}
}

buffer =  new StringBuffer(""+buffer.substring(0,buffer.length()-1)+"");
return buffer;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  json Java