本帖最后由 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>
复制代码 |