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

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

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

    溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://m.tkk7.com/sxyx2008/謝謝合作!!!

    雪山飛鵠

    溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://m.tkk7.com/sxyx2008/謝謝合作!!!

    BlogJava 首頁 新隨筆 聯系 聚合 管理
      215 Posts :: 1 Stories :: 674 Comments :: 0 Trackbacks

    1)JSON簡介
    2)JSON/LIST轉換
    3)JSON/MAP轉換
    4)JSON/動態Bean轉換
    5)JSON/靜態Bean轉換
    6)JSON/XML輸出

    1.JSON簡介
    JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式,基于JavaScript,但是不僅僅限于此。
    詳情可以參考www.json.org
    例如一段XML
    <?xml version="1.0" encoding="utf-8"?>
     <shop>
      <name>飯店</name>
        <city>北京</city>
     </shop>
    用JSON表示如下:
    {
      "name":"飯店",
      "city":"北京"
    }
    XML的解析得考慮子節點父節點關系,而JSON的解析難度相當低,很多控件,尤其是ajax相關的數據交換很多都用json.

    2)JSON/LIST轉換
    本教程解析采用的json-lib,官方網站為http://json-lib.sourceforge.net/,本教程參考官方教程
    環境需要配置的jar如下
    commons-beanutils和ezmorph控制反射
    commons-collections是apachecommons的子項目,擴展了java集合類
    commons-lang擴展了java.lang包
    commons-logging日志類
    xom是xml解析類,可以參考www.xom.nu
    junit單元測試用的jar
    json-lib核心jar
    項目文件夾中擁有貨物參數(Shop)和貨物參數列表(ShopList)兩個實體
    Shop包含name和property兩個字段,ShopList包含Shop的列表
    對應的json是
    String s = "[{name:'重量',property:'p1'},{name:'尺寸',property:'p2'},{name:'顯卡類型',property:'p3'},{name:'硬盤容量',property:'p4'},{name:'處理器',property:'p5'},{name:'內存',property:'p6'},{name:'型號',property:'p7'},{name:'貨號',property:'p8'},{name:'品牌',property:'p9'}]";
    把這樣的數據結構作為用戶定義個人信息存入數據庫可以達到個性化參數的作用,
    比如shopex的數據庫中很多表就是用的json數據類型。因為用戶自己添加的參數的長度是不固定的
    比如上述例子就擁有9個用戶自定義的參數
    當用戶需要填寫這些參數的時候,需要轉化為list,然后在struts2的view去顯示
    完成的代碼可以參考附件的ArrayUtil文件
    核心代碼僅僅就一行JSONArray jsonArray = JSONArray.fromObject(s);
    得到這個jsonArray后要轉化為ArrayList,需要用循環遍歷,如下
    for (int i = 0; i < jsonArray.size(); i++) {
       Object o = jsonArray.get(i);
       JSONObject jsonObject = JSONObject.fromObject(o);
       Shop Person = (Shop) JSONObject.toBean(jsonObject, Shop.class);
       list.add(Person);
    }
    然后得到的list就是普通的ArrayList了

    3)JSON/MAP轉換
    當我們初始化完一個map,放入json可以直接放入
    Map<String, String> map = new HashMap<String, String>();
    map.put("name", "重量");
    map.put("property", "p1");
    JSONObject jsonObject = JSONObject.fromObject(map);
    核心代碼為
    JSONObject jsonObject = JSONObject.fromObject(map);
    JsonLib會自動映射
    完成例子見附件MapUtil.java


    4)JSON/動態Bean轉換
    所謂動態bean即是java運行的時候根據情況創建的,而不是程序員已經好了的Bean
    JsonLib會自動根據Json格式數據創建字段,然后創建一個包含這些字段的Object
    本例子中采用JUNIT做單元測試驗證,見DynamicBean.java
    String s = "{name:'重量',property:'p1'}";
    JSONObject jsonObject = JSONObject.fromObject(s);
    Object bean = JSONObject.toBean(jsonObject);
    assertEquals(jsonObject.get("name"), PropertyUtils.getProperty(bean,"name"));
    assertEquals(jsonObject.get("property"), PropertyUtils.getProperty(bean,"property"));


    5)JSON/靜態Bean轉換(StaticBean.java)
    JSONLIB在轉換的時候會自動查找關系,比如子類和父類
    例如JSON數據源
    String s = "{'shopList':[{name:'重量',property:'p1'},{name:'尺寸',property:'p2'},{name:'顯卡類型',property:'p3'},{name:'硬盤容量',property:'p4'},{name:'處理器',property:'p5'},{name:'內存',property:'p6'},{name:'型號',property:'p7'},{name:'貨號',property:'p8'},{name:'品牌',property:'p9'}]}";
    存入Map
    map.put("shopList", Shop.class);
    ShopList shopList = (ShopList) JSONObject.toBean(JSONObject.fromObject(s), ShopList.class, map);
    JSONObject.toBean()方法的三個參數分別表示數據源對應的JSON對象,轉化后的對象ShopList和數據源map
    然后這樣也可以取得ShopList
    這種方法和動態轉換的區別在于,動態轉換僅僅只是轉為Object
    而靜態轉換是轉換為已經定義過的實體類,會自動映射(這點類似Ibatis)

    6)JSON/XML輸出
    如果自己用String的方法轉化為XML輸出要寫很多代碼,然后條用JSONLIB,核心代碼僅僅一步
    String xmlObject = xmlSerializer.write(object);
    比如
    String s = "{name:'重量',property:'p1'}";
    XMLSerializer xmlSerializer = new XMLSerializer();
    JSONObject object = JSONObject.fromObject(s);
    String xmlObject = xmlSerializer.write(object);
    System.out.println(xmlObject);

    輸出結果為
    <?xml version="1.0" encoding="UTF-8"?>
    <o>
      <name type="string">重量</name>
      <property type="string">p1</property>
    </o>

    posted on 2010-07-11 09:24 雪山飛鵠 閱讀(2901) 評論(2)  編輯  收藏 所屬分類: javase

    Feedback

    # re: json-lib快速入門 2010-07-11 18:56 旺才
    寫得相當的不錯哦  回復  更多評論
      

    # re: json-lib快速入門 2010-07-12 10:13 esmiles
    [完成例子見附件MapUtil.java]
    請問附件在哪???  回復  更多評論
      

    主站蜘蛛池模板: 在线a人片天堂免费观看高清| 久久久久免费看黄a级试看 | 宅男666在线永久免费观看 | 免费av欧美国产在钱| 最新中文字幕电影免费观看| 国产亚洲欧洲Aⅴ综合一区| 亚洲精品无码国产| 亚洲导航深夜福利| 一区二区三区免费视频观看| 久久国产免费一区二区三区| 日韩免费视频网站| 自拍偷自拍亚洲精品偷一| 亚洲免费观看视频| 国产三级电影免费观看| 亚洲精品在线网站| 一级毛片在播放免费| 亚洲色无码一区二区三区| 亚洲熟女www一区二区三区| 国内永久免费crm系统z在线| 日韩免费毛片视频| 成年大片免费高清在线看黄| 亚洲精品动漫免费二区| 亚洲第一福利网站| 无码 免费 国产在线观看91| 亚洲日本一区二区三区在线| 日韩免费电影网站| 亚洲乱码一区二区三区国产精品| a级毛片免费全部播放| 可以免费观看一级毛片黄a| 亚洲国产aⅴ成人精品无吗| 99久久久国产精品免费无卡顿 | 一区视频免费观看| 久久精品国产亚洲av麻豆小说 | 亚洲一区二区三区在线网站| 美女网站在线观看视频免费的| 永久免费av无码网站大全| 亚洲AV无码精品蜜桃| 免费H网站在线观看的| 久久综合亚洲色HEZYO社区| 99久久99这里只有免费的精品| 亚洲精品免费在线视频|