<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的使用還不夠自動化。
    主站蜘蛛池模板: 国产v亚洲v天堂a无| 亚洲视频人成在线播放| 亚洲欧洲精品一区二区三区| a级日本高清免费看| 亚洲精品狼友在线播放| 一个人看的hd免费视频| 亚洲综合色自拍一区| 99久久免费国产精品热| 亚洲国产成人高清在线观看| 嫩草在线视频www免费观看 | 免费大片在线观看网站| 国内成人精品亚洲日本语音| 免费国产a国产片高清| 国产黄在线播放免费观看| 亚洲高清国产AV拍精品青青草原| 中国在线观看免费的www| 亚洲AV无码国产精品麻豆天美| 久久aa毛片免费播放嗯啊| 亚洲美女自拍视频| 免费黄色网址网站| 亚洲国产欧美国产综合一区| 免费一级毛片免费播放| a级毛片无码免费真人久久| 亚洲第一视频网站| 99热在线精品免费全部my| 亚洲AV网一区二区三区| 亚洲美日韩Av中文字幕无码久久久妻妇| 久久久久久av无码免费看大片 | 亚洲国产日韩视频观看| 免费jlzzjlzz在线播放视频| 成人国产精品免费视频| 亚洲精品资源在线| 国产精品另类激情久久久免费| 未满十八私人高清免费影院| 亚洲AV无码久久精品蜜桃| 久久精品免费一区二区喷潮| 国产黄色片免费看| 亚洲1区1区3区4区产品乱码芒果| 免费在线观看一级毛片| 亚在线观看免费视频入口| 亚洲第一街区偷拍街拍|