<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Nomad & His Life

    博觀而約取,厚積而薄發
    posts - 15, comments - 88, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    讓JSON.org支持JavaBean

    Posted on 2006-10-06 20:18 Nomad 閱讀(1777) 評論(1)  編輯  收藏 所屬分類: JavaAjax
    JSON.org包里的方法對JavaBean沒有支持,而JSON-lib雖然功能豐富,但是依賴很多其它的包,為了方便我就寫了一個類繼承于JSONObject,方便JavaBean的使用。

    源代碼:
    package?net.jialing;

    import?java.lang.reflect.Method;
    import?java.util.StringTokenizer;

    /**
    ?*?支持JavaBean的JSONObject
    ?*
    ?*?
    @author?Michael
    ?*?
    @since?2006-10-4
    ?*?
    @version?0.1a
    ?
    */

    public?class?JSONReflectObject?extends?JSONObject?{
    ????
    ????
    public?JSONReflectObject()?{
    ????????
    super();
    ????}
    ????
    ????
    /**
    ?????*?構造函數
    ?????*?
    @param?object?需要得到信息的JavaBean
    ?????*?
    @param?names?屬性的字符串數組
    ?????
    */
    ????
    public?JSONReflectObject(Object?object,?String?names[])?{
    ????????
    this();
    ????????
    for?(int?i?=?0;?i?<?names.length;?i?+=?1)?{
    ????????????
    try?{
    ????????????????String?name?
    =?names[i];
    ????????????????setProperty(object,name);
    ????????????}?
    catch?(Exception?e)?{
    ????????????????
    /*?forget?about?it?*/
    ????????????}
    ????????}
    ????}
    ????
    ????
    /**
    ?????*?得到JavaBean的某個屬性,支持加.得到屬性的屬性
    ?????*?
    ?????*?
    @param?owner?對象
    ?????*?
    @param?property??屬性名
    ?????*?
    @return?方法返回值
    ?????*?
    @throws?Exception
    ?????
    */
    ????
    private?void?setProperty(Object?owner,?String?property)
    ????????????
    throws?Exception?{

    ????????Class?ownerClass;
    ????????Object[]?args?
    =?null;
    ????????Class[]?argsClass?
    =?null;
    ????????

    ????????
    int?i=0,loop=0;?//i表示第幾層JSOBObject,loop表示循環了幾次
    ????????
    ????????StringTokenizer?st?
    =?new?StringTokenizer(property,".");
    ????????
    ????????JSONObject?jo[]?
    =?new?JSONObject[st.countTokens()-1];
    ????????
    for(int?x=0,y=jo.length;x<y;x++)?{
    ????????????jo[x]?
    =?new?JSONObject();
    ????????}
    ????????
    ????????
    while?(st.hasMoreTokens())?{
    ????????????String?propertyName?
    =?st.nextToken();
    ?????????????
    ??????????ownerClass?
    =?owner.getClass();
    ????????String?methodName?
    =?"get"
    ????????????????????????
    +?propertyName.substring(0,1).toUpperCase()?
    ????????????????????????
    +?propertyName.substring(1);

    ????????Method?method?
    =?ownerClass.getMethod(methodName,?argsClass);
    ????????owner?
    =?method.invoke(owner,?args);

    ????????
    if(st.hasMoreTokens())?{
    ????????????
    if(?loop?==?0)?
    ????????????????
    this.put(propertyName,jo[0]);
    ????????????
    else?
    ????????????????jo[i].put(propertyName,?jo[
    ++i]);
    ????????????????
    ????????????loop
    ++;
    ????????}
    ????????????
    else?{
    ????????????????
    if(loop==0)
    ????????????????????
    this.put(propertyName,?owner.toString());
    ????????????????
    else
    ????????????????????jo[i].put(propertyName,?owner.toString());
    ????????????}
    ????????????
    ????????}

    ????}
    ????
    }


    測試準備:

    public?class?Student?{
    ????
    private?String?name;
    ????
    private?String?email;
    ????
    private?Birthday?birthday;

    ??????getter?and?setter
    }

    public?class?Birthday?{
    ????
    private?Year?year;
    ????
    private?String?month;
    ????
    private?String?day;

    ??????
    public?Birthday(String?year,String?month,String?day){
    ????????
    this.year?=?new?Year(year);
    ????????
    this.month?=?month;
    ????????
    this.day?=?day;
    ????}

    ??????getter?and?setter
    }

    public?class?Year?{
    ????
    private?String?y;

    ??????getter?and?setter
    ????
    ????
    public?Year(String?y){
    ????????
    this.y?=?y;
    ????}
    }

    測試:
    public?class?Test?{
    ????
    ??????
    public?String?singleObject()?throws?JSONException?{
    ????????Student?s?
    =?new?Student();
    ????????s.setName(
    "Jack");
    ????????s.setEmail(
    "jack@a.com");
    ????????s.setBirthday(
    new?Birthday("1990","12","30"));
    ????????
    ????????String[]?params?
    =?{"name","email","birthday.year.y"};
    ????????
    ????????JSONReflectObject?jo?
    =?new?JSONReflectObject(s,params);
    ????????
    return?jo.toString();
    ????}

    ??????
    public?static?void?main(String?args[])?throws?Exception{
    ????????test?t?
    =?new?test();
    ????????System.out.println(t.singleObject());
    ????}
    }

    1.首先新建一個Student
    2.設置name,email,birthday屬性
    3.把要打印出的屬性放在字符串數組里,支持加"."得到屬性的屬性
    4.建立JSONReflectObject,將要輸出的對象和屬性數組作為參數
    5.打印:{"email":"jack@a.com","name":"Jack","birthday":{"year":{"y":"1990"}}}

    評論

    # re: 讓JSON.org支持JavaBean  回復  更多評論   

    2006-10-08 12:57 by justfly
    看了看,失望,只有bean2json沒有json2bean
    而且bean2json的使用還不夠自動化。
    主站蜘蛛池模板: 一区二区三区在线观看免费| 日韩特黄特色大片免费视频| 精品亚洲成a人在线观看| 亚洲黄色免费网站| 91麻豆国产自产在线观看亚洲| 国产免费久久精品99re丫y| 国产一级高清视频免费看| 最近中文字幕免费2019| 中国一级毛片免费看视频| 国产精品亚洲专区无码WEB| 亚洲制服丝袜中文字幕| 久久精品国产亚洲av麻豆小说 | 亚洲国产精品张柏芝在线观看 | sss日本免费完整版在线观看| 亚洲综合色丁香婷婷六月图片 | 中文字幕无码毛片免费看| 污污免费在线观看| 爱情岛论坛亚洲品质自拍视频网站| 亚洲日本国产综合高清| 亚洲欧洲日韩国产| 久久亚洲精精品中文字幕| 国产精品亚洲片在线| 在线亚洲精品自拍| 国产成人精品日本亚洲专区 | 男女猛烈xx00免费视频试看| 亚洲欧好州第一的日产suv| 亚洲一区精彩视频| 国产精品亚洲综合五月天| 国产亚洲精aa在线看| 亚洲免费综合色在线视频| 亚洲精品人成网线在线播放va| 中文字幕乱码亚洲无线三区| 亚洲一级片在线播放| 香蕉大伊亚洲人在线观看| 亚洲国产精品免费观看| 亚洲码和欧洲码一码二码三码| 亚洲精品色在线网站| 女人裸身j部免费视频无遮挡| 九九九国产精品成人免费视频| 国产日韩久久免费影院| a毛片在线免费观看|