一、序言
JSON 数据的书写格式是:名称/值,因为json具有鲜明的格式,我们常用它来作为数据传输载体。我们在项目中经常会把从数据库得到的数据转成json格式传到前台,接收后进行解析,下面这个是我写的一个工具类,利用反射将对象中的属性,值 并转为json格式。
二、实现背景
在项目代码进行编写时,会经常使用json格式的数据进行数据传递,但是使用jsonArray的话都需要再重新转成string类型,如果需要大量的json数据的话会造成大量的资源浪费,因此编写了一个直接转换成string类型的json工具类。
三、实现方式
/** * @描述 将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; }
/** * @描述 将集合转为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字符串的样式,。
后面带有jar包以及源码,求大神指点
相关推荐
C# json格式转换,Json格式字符串与C#对象相互转换,类库和测试demo 写了一个json与C#对象相互装换的类库,直接调用就行,有测试案例,代码注释非常详细 部分方法: /// 将Json字符串解析为C#中的对象 /// Json格式...
主要用于将java对象转换为json对象字符串,或字符串数组。
在cjson基础上,实现了字符串与结构体自动相互转化的功能。 可以自动将字符串(JSON格式)转化为对应的结构体,反之亦可
Json对象与json字符串互相转换处理工具
由php对象生成json字符串 把php对象变成json字符串.zip
利用java反射将json字符串转成对象;
自己有空时用java反射写的json转化工具,有不完善之处,多包涵
在cjson基础上,实现了字符串与结构体自动相互转化的功能。 可以自动将字符串(JSON格式)转化为对应的结构体,反之亦可。
json字串 解析成jsonObject的工具,替代eval方法使用 IE8以上浏览器貌似自带 JSON.stringify
json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象json转对象...
NULL 博文链接:https://yxgyh.iteye.com/blog/392657
对象生成json字符串,根据字符串生成对象|list
js页面字符串转json对象
利用Java的反射机制和json-lib包进行对象转JSON,包括set,list,object等,只需要对util类进行对应的配置即可。在对象转json的时候经常会出现对象持有set,list,date类型时会发生递归无限循环的情况,此代码完美...
封装jsonbase类,抽象C++对象与json字符的转换的基本方法tojson、fromjson,以及json字符保存为文件StyledStreamWriter,从文件中读取json字符串并转换成C++对象fromFile。以学生类、学生选择的课程类、最终生成的...
一个把对象转换为JSON字符串 把该DLL引入项目中就能使用了
Video对象变为json格式的字符串 json格式的字符串变为Video对象
把对象转换成json字符串的实例,包括单独的对象、List、对象和List混合。MyEclipse工程,里面包括五个Jar包:commons-beanutils-1.8.0.jar,commons-collections-3.2.1.jar,commons-lang-2.4.jar,commons-logging-...