A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© straw 中级黑马   /  2013-7-15 08:40  /  1442 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 straw 于 2013-7-16 23:02 编辑

关于json代码自动生成的工具有jsonUtil.jar,但是架包太多了,本人嫌麻烦,就尝试自己写写一个算法.下面分享下源代码:(本人菜鸟,如果有哪里写的不好的话请指出来我们一起学习...)

  1. <P> /*
  2. *json工具    appBean(Object obj)  方法获取添加对象
  3. *         toJsonString()       获取json的java字符串类型
  4. *         jsond的java字符串类型如:{ket:'value',key:'value'...},{},{}...]
  5. */
  6. import java.lang.reflect.InvocationTargetException;
  7. import java.util.*;
  8. public class MyJson {
  9. //定义objs集合用于装对象集
  10. private static ArrayList objs=new ArrayList();
  11. private static String getFiled(ArrayList fields){
  12.   StringBuilder sb=new StringBuilder();
  13.   sb.append('{');
  14.   for(int i=0;i<fields.size();i++){
  15.    Field file=(Field)fields.get(i);
  16.    sb.append(file.fieldName+":");
  17.    //如果是字符串的话要加单引号
  18.    if("class java.lang.String".equals(file.type)){
  19.     sb.append("'"+file.filedValue+"'");
  20.    }else{
  21.     //其他数据类型就不加单引号
  22.     sb.append(file.filedValue);
  23.    }
  24.    sb.append(",");
  25.   }
  26.   //去掉最后的","号
  27.   sb.deleteCharAt(sb.length()-1);
  28.   sb.append('}');
  29.   return sb.toString();
  30. }
  31.     public static String toJsonString(){
  32.      StringBuilder sb=new StringBuilder();
  33.      sb.append("[");
  34.      //将字段封装成{ket:'value',key:'value'...}对象objJson
  35.      for(int i=0;i<objs.size();i++){
  36.        String objJson=getFiled((ArrayList)objs.get(i));
  37.        //将{ket:'value',key:'value'...}对象objJson拼合成json字符串
  38.        sb.append(objJson+",");
  39.      }
  40.      sb.deleteCharAt(sb.length()-1);
  41.      sb.append("]");
  42.      return sb.toString();
  43.     }
  44. public static void appBean(Object obj) {
  45.   //定义fields集合用于装字段
  46.   ArrayList fields=new ArrayList();
  47.   // 获取bean对象
  48.   Object bean = obj;
  49.   // 反射获取所有字段名
  50.   for(int i=0;i<bean.getClass().getDeclaredFields().length;i++){
  51.    //获取字段名
  52.    String fieldName=bean.getClass().getDeclaredFields()[i].getName();
  53.    //获取字段基本类型class java.lang.String   int
  54.    String type=bean.getClass().getDeclaredFields()[i].getType().toString();
  55.    //获取字段名对应的get方法获取值
  56.    String filedValue=getValue(fieldName,bean);
  57.    //将field类型名称值封装成filed对象
  58.    Field field=new Field();
  59.    field.type=type;
  60.    field.fieldName=fieldName;
  61.    field.filedValue=filedValue;
  62.    //将filed对象添加到fields集合
  63.    fields.add(field);
  64.   }
  65.   //将fields集合封装到objs集合中
  66.   objs.add(fields);
  67. }
  68. //获取字段名对应的get方法获取值
  69. private static String getValue(String filedName,Object obj){
  70.   Object value=null;
  71.   //获取方法名geNmae()
  72.   String methodName=getMethodName(filedName);
  73.   //获取并执行get方法返回值
  74.   try {
  75.    value=obj.getClass().getMethod(methodName).invoke(obj);
  76.   } catch (Exception e) {
  77.    e.printStackTrace();
  78.   }
  79.   return value+"";
  80. }
  81. //获取方法名如geName()
  82. private static String getMethodName(String name){
  83.   //获取第一个字符将其转换成大写
  84.   String chatFirst=name.charAt(0)+"";
  85.   chatFirst="get"+chatFirst.toUpperCase();
  86.   //将原守字串截取第一个字符
  87.   name=name.substring(1);
  88.   return chatFirst+name;
  89. }
  90. //定义一个字段类
  91. static class Field{
  92.   String type;
  93.   String fieldName;
  94.   String filedValue;
  95. }
  96. }</P>
复制代码

评分

参与人数 1技术分 +1 收起 理由
神之梦 + 1 很给力!

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马