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

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

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

    Nomad & His Life

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

    讓JSON.org支持JavaBean

    Posted on 2006-10-06 20:18 Nomad 閱讀(1791) 評(píng)論(1)  編輯  收藏 所屬分類: JavaAjax
    JSON.org包里的方法對(duì)JavaBean沒有支持,而JSON-lib雖然功能豐富,但是依賴很多其它的包,為了方便我就寫了一個(gè)類繼承于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();
    ????}
    ????
    ????
    /**
    ?????*?構(gòu)造函數(shù)
    ?????*?
    @param?object?需要得到信息的JavaBean
    ?????*?
    @param?names?屬性的字符串?dāng)?shù)組
    ?????
    */
    ????
    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的某個(gè)屬性,支持加.得到屬性的屬性
    ?????*?
    ?????*?
    @param?owner?對(duì)象
    ?????*?
    @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表示循環(huán)了幾次
    ????????
    ????????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());
    ????????????}
    ????????????
    ????????}

    ????}
    ????
    }


    測試準(zhǔn)備:

    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.首先新建一個(gè)Student
    2.設(shè)置name,email,birthday屬性
    3.把要打印出的屬性放在字符串?dāng)?shù)組里,支持加"."得到屬性的屬性
    4.建立JSONReflectObject,將要輸出的對(duì)象和屬性數(shù)組作為參數(shù)
    5.打印:{"email":"jack@a.com","name":"Jack","birthday":{"year":{"y":"1990"}}}

    評(píng)論

    # re: 讓JSON.org支持JavaBean  回復(fù)  更多評(píng)論   

    2006-10-08 12:57 by justfly
    看了看,失望,只有bean2json沒有json2bean
    而且bean2json的使用還不夠自動(dòng)化。
    主站蜘蛛池模板: 亚洲女人被黑人巨大进入| 亚洲va中文字幕无码| 玖玖在线免费视频| 亚洲综合色区在线观看| 免费不卡在线观看AV| 久久久免费观成人影院| 又硬又粗又长又爽免费看 | 亚洲精品国产成人片| 亚洲日韩精品一区二区三区| www永久免费视频| 一级毛片aa高清免费观看| 理论亚洲区美一区二区三区| 亚洲人成人77777网站不卡| 亚洲免费视频播放| 一本色道久久综合亚洲精品蜜桃冫 | 亚洲日韩一页精品发布| 国产成人亚洲精品91专区手机| 亚洲精品无码久久久| 国产精品V亚洲精品V日韩精品| 亚洲熟女一区二区三区| 亚洲成Av人片乱码色午夜| 久久精品国产亚洲AV网站| 国产精品另类激情久久久免费| 免费精品国产自产拍观看| 亚洲AV伊人久久青青草原| 亚洲视频小说图片| 亚洲国产精品免费观看| 二区久久国产乱子伦免费精品| 亚洲区日韩精品中文字幕| 亚洲国产午夜电影在线入口| 亚洲一卡2卡4卡5卡6卡残暴在线| 精品国产_亚洲人成在线高清 | 免费无码A片一区二三区| 国产成人亚洲精品狼色在线| 亚洲中文字幕视频国产| 91亚洲精品自在在线观看| 日韩在线视频播放免费视频完整版 | 久久天天躁狠狠躁夜夜免费观看| 亚洲一级黄色视频| 久久精品国产亚洲AV未满十八| 18禁超污无遮挡无码免费网站|