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

          雪山飛鵠

          溫馨提示:您的每一次轉載,體現了我寫此文的意義!!!煩請您在轉載時注明出處http://www.aygfsteel.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 雪山飛鵠 閱讀(2906) 評論(2)  編輯  收藏 所屬分類: javase

          Feedback

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

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

          主站蜘蛛池模板: 谢通门县| 通渭县| 赤峰市| 璧山县| 安国市| 绥中县| 连云港市| 格尔木市| 连平县| 龙川县| 五河县| 通许县| 来宾市| 玉林市| 珲春市| 云阳县| 公安县| 湖北省| 沙坪坝区| 温宿县| 林芝县| 滨海县| 梨树县| 建平县| 商南县| 峨眉山市| 金沙县| 仙游县| 扎兰屯市| 泾源县| 邛崃市| 望奎县| 石棉县| 封丘县| 财经| 宝丰县| 麻江县| 武功县| 临泉县| 拉萨市| 杭州市|