快速将List对象、Map对象或者普通普通对象转换成json字符串
来源:互联网 发布:java获取类名 编辑:程序博客网 时间:2024/05/19 02:29
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,"); } } 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;}
}s
1 0
- 快速将List对象、Map对象或者普通普通对象转换成json字符串
- JavaBean Map List转换成Json 对象或者字符串
- 将对象、Map或者List转换为Json串
- jQuery对象转换成普通字符串
- js将js数组或者对象转换成json字符串
- java方式的将java对象以及list或者map转化为json数据,json转换为object或者map
- T对象转换成map对象/List对象 * 或者map对象/List对象转换为T对象
- json集合中的时间对象转换成普通时间格式
- android中普通的java对象转换成 json格式的字符串
- 将JSON对象转换成JSON字符串
- 将json字符串转换成json对象
- Jackson 将Map对象转换成JSON
- Json字符串转换Map 对象
- 将list对象转换成json格式
- 将list对象转换成json格式
- JSON字符串转换成Map对象
- JSON字符串转换成Map对象
- JSON字符串对象转换List
- C# StreamReader/StreamWriter与FileStream用法详解
- Message,Handler,MessageQueue,Looper之间的关系
- c++——补第一次作业1
- CNN基础及开发环境搭建(综合参考)
- axure 原型设计20条军规
- 快速将List对象、Map对象或者普通普通对象转换成json字符串
- 第十六周项目1-小玩文件(2)
- UIAlertController的用法
- swift2.0 学习笔记Seventeen
- Android @SuppressLint("NewApi")和@TargetApi()的区别
- Jni
- android 在命令行中查看SQLite数据库数据
- 坐标系(下) convertToNodeSpace和convertToWorldSpace
- 【NOI 2010】【BZOJ 2005】【JZOJ 2225】能量采集