黑马程序员技术交流社区
标题:
关于json代码自动生成的代码
[打印本页]
作者:
straw
时间:
2013-7-15 08:40
标题:
关于json代码自动生成的代码
本帖最后由 straw 于 2013-7-16 23:02 编辑
关于json代码自动生成的工具有jsonUtil.jar,但是架包太多了,本人嫌麻烦,就尝试自己写写一个算法.下面分享下源代码:(本人菜鸟,如果有哪里写的不好的话请指出来我们一起学习...)
<P> /*
*json工具 appBean(Object obj) 方法获取添加对象
* toJsonString() 获取json的java字符串类型
* jsond的java字符串类型如:{ket:'value',key:'value'...},{},{}...]
*/
import java.lang.reflect.InvocationTargetException;
import java.util.*;
public class MyJson {
//定义objs集合用于装对象集
private static ArrayList objs=new ArrayList();
private static String getFiled(ArrayList fields){
StringBuilder sb=new StringBuilder();
sb.append('{');
for(int i=0;i<fields.size();i++){
Field file=(Field)fields.get(i);
sb.append(file.fieldName+":");
//如果是字符串的话要加单引号
if("class java.lang.String".equals(file.type)){
sb.append("'"+file.filedValue+"'");
}else{
//其他数据类型就不加单引号
sb.append(file.filedValue);
}
sb.append(",");
}
//去掉最后的","号
sb.deleteCharAt(sb.length()-1);
sb.append('}');
return sb.toString();
}
public static String toJsonString(){
StringBuilder sb=new StringBuilder();
sb.append("[");
//将字段封装成{ket:'value',key:'value'...}对象objJson
for(int i=0;i<objs.size();i++){
String objJson=getFiled((ArrayList)objs.get(i));
//将{ket:'value',key:'value'...}对象objJson拼合成json字符串
sb.append(objJson+",");
}
sb.deleteCharAt(sb.length()-1);
sb.append("]");
return sb.toString();
}
public static void appBean(Object obj) {
//定义fields集合用于装字段
ArrayList fields=new ArrayList();
// 获取bean对象
Object bean = obj;
// 反射获取所有字段名
for(int i=0;i<bean.getClass().getDeclaredFields().length;i++){
//获取字段名
String fieldName=bean.getClass().getDeclaredFields()[i].getName();
//获取字段基本类型class java.lang.String int
String type=bean.getClass().getDeclaredFields()[i].getType().toString();
//获取字段名对应的get方法获取值
String filedValue=getValue(fieldName,bean);
//将field类型名称值封装成filed对象
Field field=new Field();
field.type=type;
field.fieldName=fieldName;
field.filedValue=filedValue;
//将filed对象添加到fields集合
fields.add(field);
}
//将fields集合封装到objs集合中
objs.add(fields);
}
//获取字段名对应的get方法获取值
private static String getValue(String filedName,Object obj){
Object value=null;
//获取方法名geNmae()
String methodName=getMethodName(filedName);
//获取并执行get方法返回值
try {
value=obj.getClass().getMethod(methodName).invoke(obj);
} catch (Exception e) {
e.printStackTrace();
}
return value+"";
}
//获取方法名如geName()
private static String getMethodName(String name){
//获取第一个字符将其转换成大写
String chatFirst=name.charAt(0)+"";
chatFirst="get"+chatFirst.toUpperCase();
//将原守字串截取第一个字符
name=name.substring(1);
return chatFirst+name;
}
//定义一个字段类
static class Field{
String type;
String fieldName;
String filedValue;
}
}</P>
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2