<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) 評論(1)  編輯  收藏 所屬分類: Java 、Ajax
    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();
    ????}
    ????
    ????
    /**
    ?????*?構造函數(shù)
    ?????*?
    @param?object?需要得到信息的JavaBean
    ?????*?
    @param?names?屬性的字符串數(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的某個屬性,支持加.得到屬性的屬性
    ?????*?
    ?????*?
    @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表示循環(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());
    ????????????}
    ????????????
    ????????}

    ????}
    ????
    }


    測試準備:

    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.把要打印出的屬性放在字符串數(shù)組里,支持加"."得到屬性的屬性
    4.建立JSONReflectObject,將要輸出的對象和屬性數(shù)組作為參數(shù)
    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级男女仿爱免费视频| 亚洲人成网站999久久久综合| 色影音免费色资源| 国产亚洲AV无码AV男人的天堂| 亚洲日韩中文在线精品第一| 亚洲成在人线在线播放无码| 免费无码又爽又高潮视频| 亚洲国产精品一区二区三区在线观看 | 午夜精品免费在线观看| 亚洲视频一区二区| 国产激情久久久久影院老熟女免费 | 国产精品久久久久免费a∨| 久久久久亚洲Av无码专| 亚洲免费在线视频观看| 精品久久久久久亚洲精品| 精品剧情v国产在免费线观看| 亚洲中文字幕久久精品无码APP| 亚洲精品视频免费看| 国产福利在线观看免费第一福利| 亚洲成a人片在线观看老师| xvideos永久免费入口| 亚洲精品成人网站在线观看| 99热这里只有精品6免费| 亚洲另类图片另类电影| 成人免费毛片观看| 国产99久久久国产精免费| 久久精品国产亚洲综合色| 91福利免费体验区观看区| 亚洲国产精品网站在线播放| 亚洲国产精品嫩草影院久久| 国产在线观看免费视频软件| 亚洲图片校园春色| 免费大黄网站在线观看| 桃子视频在线观看高清免费视频| 亚洲一区二区高清| 99在线免费观看视频| 国产精品亚洲专区一区| 亚洲国产精品无码久久久秋霞2| 羞羞的视频在线免费观看| 在线精品亚洲一区二区小说| 最近免费2019中文字幕大全|