使用java反射簡單模擬json數(shù)據(jù)

在做項(xiàng)目時(shí)没炒,公司催進(jìn)度,往往是接口都還沒有寫好犯戏,產(chǎn)品就開始要各種演示版本送火,為了演示的時(shí)候能展示數(shù)據(jù),往往就需要客戶端自己模擬數(shù)據(jù)先匪,以達(dá)到展示的目的种吸,這是苦逼,我就上網(wǎng)百度了一下呀非,再發(fā)揮自己的聰明才智坚俗,寫了一個(gè)模擬json數(shù)據(jù)的轉(zhuǎn)化工具類,方便大家自舉岸裙。

public class JsonUtil {

    public static String class2json(Object obj) {
        // 通過反射獲取到類
        Class<? extends Object> clazz = obj.getClass();
        // 獲取類中所有的字段
        Field[] fields = clazz.getDeclaredFields();

        StringBuffer buffer = new StringBuffer();
        buffer.append("{");
        // 設(shè)置setAccessible方法能獲取到類中的私有屬性和方法
        Field.setAccessible(fields, true);
        for (Field field : fields) {

            try {

                Object object = field.get(obj);

                // 獲取到該屬性對(duì)應(yīng)類型名稱
                String fieldName = field.getType().getSimpleName();

                // 如果該屬性的值為空
                if (object == null) {

                    // 根據(jù)類型判斷追加的值
                    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 {

                    // 獲取到該屬性的值對(duì)應(yīng)的類
                    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")) {
                        // 將獲取到的值強(qiáng)轉(zhuǎn)為list集合
                        List<Object> list = (List<Object>) object;
                        buffer.append("\"" + field.getName() + "\":[");

                        // 執(zhí)行l(wèi)istTojson方法將獲取到的list轉(zhuǎn)為json格式
                        buffer = listTojson(buffer, list).append("]");
                    } 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();
    }

    public static StringBuffer listTojson(StringBuffer buffer, List list)
            throws IllegalArgumentException, IllegalAccessException {

        // 遍歷傳過來的list數(shù)組
        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("{");
                    // 遍歷對(duì)象中的所有字段獲取字段值和字段名稱拼成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;
    }

    public 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 {
                    buffer = beanTojson(object, buffer).append("}");
                }
            }

        }

        buffer = new StringBuffer("" + buffer.substring(0, buffer.length() - 1)
                + "");
        buffer.append("}");

        return buffer;
    }

}

使用方法

1.先定義好自己的返回樣式

public class Result {
  int code;
  String message;
  List<Pig> pigArray;
  public int getCode() {
      return code;
  }
  public void setCode(int code) {
      this.code = code;
  }
  public String getMessage() {
      return message;
  }
  public void setMessage(String message) {
      this.message = message;
  }
  public List<Pig> getPigArray() {
      return pigArray;
  }
  public void setPigArray(List<Pig> pigArray) {
      this.pigArray = pigArray;
  }

  

}

public class Pig {
   int age;
   int weight;
public int getAge() {
    return age;
}
public void setAge(int age) {
    this.age = age;
}
public int getWeight() {
    return weight;
}
public void setWeight(int weight) {
    this.weight = weight;
}
   
}

最后在程序中調(diào)用

           Result rs=new Result();
        rs.setCode(1);
        rs.setMessage("用戶有數(shù)據(jù)");
        List<Pig> list=new ArrayList<Pig>();
        Pig p= new Pig();
        p.setAge(10);
        p.setWeight(23);
        list.add(p);
        rs.setPigArray(list);
        System.out.println("json:" +JsonUtil.class2json(rs));

效果如下:

{
    "code": 1,
    "message": "用戶有數(shù)據(jù)",
    "pigArray": [{
        "age": 10,
        "weight": 23
    }]
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末猖败,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子哥桥,更是在濱河造成了極大的恐慌辙浑,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件拟糕,死亡現(xiàn)場(chǎng)離奇詭異判呕,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)送滞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門侠草,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人犁嗅,你說我怎么就攤上這事边涕。” “怎么了褂微?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵功蜓,是天一觀的道長。 經(jīng)常有香客問我宠蚂,道長式撼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任求厕,我火速辦了婚禮著隆,結(jié)果婚禮上扰楼,老公的妹妹穿的比我還像新娘。我一直安慰自己美浦,他們只是感情好弦赖,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浦辨,像睡著了一般蹬竖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上流酬,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天案腺,我揣著相機(jī)與錄音,去河邊找鬼康吵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛访递,可吹牛的內(nèi)容都是我干的晦嵌。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼拷姿,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼惭载!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起响巢,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤描滔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后踪古,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體含长,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年伏穆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了拘泞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡枕扫,死狀恐怖陪腌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烟瞧,我是刑警寧澤诗鸭,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站参滴,受9級(jí)特大地震影響强岸,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜卵洗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一请唱、第九天 我趴在偏房一處隱蔽的房頂上張望弥咪。 院中可真熱鬧,春花似錦十绑、人聲如沸聚至。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽扳躬。三九已至,卻和暖如春甚亭,著一層夾襖步出監(jiān)牢的瞬間贷币,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工亏狰, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留役纹,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓暇唾,卻偏偏與公主長得像促脉,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子策州,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,304評(píng)論 25 707
  • 追尋你的身影 期待你的一次轉(zhuǎn)身 一次回眸 期待著一次片刻的交集 期待你能讀出我眼里的所有 春風(fēng)習(xí)習(xí)柳絲敏感地?fù)u擺 ...
    明沙水閱讀 132評(píng)論 0 5
  • 你喜歡唱歌嗎瘸味? 你喜歡表演嗎? 你敢在臺(tái)上SHOW出你的風(fēng)格嗎够挂? …… 歡迎來到輕音部——一個(gè)助力夢(mèng)想的地方旁仿! 我...
    孤寂澄光閱讀 227評(píng)論 0 0
  • 今天在外地,手頭沒有繪本孽糖,剛好分享一下我讀《要幸福的活著》這個(gè)繪本的心理過程枯冈。 14號(hào)下午快6點(diǎn)的時(shí)候拿到了宮西達(dá)...
    Amy胡閱讀 2,334評(píng)論 0 3
  • “爹,娘梭姓,姐姐霜幼,我走了!”站在路口的少女向送行的親人揮手誉尖,聲音有些哽咽罪既,“棠兒,要不你不去了铡恕,這一去琢感,怕是...
    灤珞閱讀 303評(píng)論 0 0