紫風亂寫

          除了他眼前的屏幕,這個人什么也沒看見。
          被周圍的電腦簇擁著,他只知道他所創造的現實,但又意識到那是虛幻。
          他已經超越了技術。也超越了機器。
          posts - 62, comments - 93, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          對JSON幾個實現的測試和總結

          Posted on 2006-10-03 17:45 Justfly Shi 閱讀(3141) 評論(3)  編輯  收藏

            由于最近需要通過一種跨平臺、跨語言的方式來傳遞需要多層嵌套的數據,因此研究了一下JSON。首先試用JSON-lib做一下測試,但是未能通過測試,于是再找其他幾個Java實現,但是也未能通過測試。分別測試對于一個簡單的類的序列化和反序列化,對于一個有數組和Map域的對象的序列化和反序列化。對于結果比較失望。
            其中的JSON-lib能通過第一個測試,第二個測試的時候則失敗。但是有一個很大的bug,對于存在null域的對象反序列化的時候會失敗。該bug已經在主頁上了,但是不知道那個版本會修改。
            其中的StringTree只能revert回一個Map對象。而對于一個復雜的對象,則無法revert。在做第二個測試的時候總是停在那里不動了。
            其中的JSON-Tool根本就沒有直接的序列化的功能。
            由于測試情況很不理想,因此只進行了兩個測試,對于特殊字符、國際化的測試沒有進行。
            
            結論:JSON的序列化和反序列化功能還不成熟。
            所有代碼下載地址http://www.aygfsteel.com/Files/justfly/jsonTest.zip
            測試類如下:

          ?1 /**
          ?2 ?*?created?on?2006-10-2
          ?3 ? */

          ?4 package ?cn.shijingjia.justfly.json;
          ?5
          ?6 import ?java.util.HashMap;
          ?7 import ?java.util.Map;
          ?8
          ?9 import ?junit.framework.Assert;
          10 import ?net.sf.json.JSONObject;
          11
          12 import ?org.junit.Before;
          13 import ?org.junit.Test;
          14
          15 import ?cn.shijingjia.justfly.json.imps.StringTreeImp;
          16
          17 /**
          18 ?*? @author ?Shi?Jiemiao
          19 ?*?
          20 ? */

          21 public ? class ?JSonTest? {
          22
          23 ???? private ?SimpleClass?simple1? = ? new ?SimpleClass();
          24
          25 ???? private ?SimpleClass?simple2? = ? new ?SimpleClass();
          26
          27 ???? private ?SimpleClass?simple3? = ? new ?SimpleClass();
          28
          29 ???? private ?IJSonUtil < SimpleClass > ?simpUtil;
          30
          31 ???? private ?IJSonUtil < CompositeClass > ?compositeUtil;
          32
          33 ???? /**
          34 ?????*? @throws ?java.lang.Exception
          35 ????? */

          36 ????@Before
          37 ???? public ? void ?setUp()? throws ?Exception? {
          38 ????????simple1.setAInt( 1 );
          39 ????????simple1.setStr( " name1 " );
          40 ????????simple2.setAInt( 2 );
          41 ????????simple2.setStr( " name2 " );
          42 ????????simple3.setAInt( 3 );
          43 ????????simple3.setStr( " name3 " );
          44
          45 ????????simpUtil? = ? new ?StringTreeImp < SimpleClass > ();
          46 ????????compositeUtil? = ? new ?StringTreeImp < CompositeClass > ();
          47 ????}

          48
          49 ???? /**
          50 ?????*?Test?if?it?can?format?a?object?and?then?reverted?it?back
          51 ????? */

          52 ????@Test
          53 ???? public ? void ?simpleTest()? {
          54
          55 ????????String?jsonString? = ?simpUtil.toString(simple1);
          56 ????????System.out.println( " simpleClass\n " ? + ?jsonString);
          57 ????????SimpleClass?revertedObj? = ?simpUtil.toBean(jsonString);
          58 ????????Assert.assertEquals(simple1,?revertedObj);
          59 ????}

          60
          61 ???? /**
          62 ?????*?Test?if?it?can?format?and?revert?a?composite?object?with?array?and?map
          63 ????? */

          64 ????@Test
          65 ???? public ? void ?testComposite()? {
          66 ???????? // ?setup?the?origin?composite?class
          67 ????????CompositeClass?composite? = ? new ?CompositeClass();
          68 ????????composite.setName( " composite?Instance " );
          69 ????????composite.setSimple(simple2);
          70 ????????composite.setSimples( new ?SimpleClass[]? {?simple1,?simple3,?simple2?} );
          71 ????????Map?multiMap? = ? new ?HashMap();
          72 ????????multiMap.put( " simpleObject " ,?simple3);
          73 ????????multiMap.put( " aString " ,? " This?is?a?String " );
          74 ????????multiMap.put( " A?integer " ,? 297 );
          75 ????????composite.setMultiMap(multiMap);
          76 ???????? // ?orgin?json?object?and?jsonString
          77 ????????String?jsonString? = ?compositeUtil.toString(composite);
          78 ????????System.out.println( " composite?class\n " ? + ?jsonString);
          79
          80 ???????? // ?Map?atrMap?=?new?HashMap();
          81 ???????? // ?atrMap.put("simpleObject",?SimpleClass.class);
          82 ???????? // ?atrMap.put("aString",?String.class);
          83 ???????? // ?atrMap.put("A?integer",?Integer.class);
          84
          85 ????????CompositeClass?revertedBean? = ?compositeUtil.toBean(jsonString);
          86 ????????Assert.assertEquals(composite,?revertedBean);
          87 ????}

          88
          89 }

          90



          評論

          # json的確不行。  回復  更多評論   

          2006-10-08 13:51 by lvcha
          效率和健壯性都不行。
          不考慮效率可以用xml,xstream還是很健壯的,我寫了個C#的實現。
          我自己寫了個二進制流的(java<-->c#),性能相對xml和json好一些。
          可以擴展成支持其他語言的,因為二進制流是個中間格式。
          http://java-cs-bridge.sourceforge.net/

          # re: 對JSON幾個實現的測試和總結  回復  更多評論   

          2006-10-08 17:51 by steeven
          google的gwt好像支持這個,看看能不能分離出來玩玩。

          # re: 對JSON幾個實現的測試和總結  回復  更多評論   

          2007-12-11 20:27 by 小石
          推薦http://www.json.org/java/index.html

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 如东县| 荃湾区| 巢湖市| 那曲县| 彰化市| 法库县| 大厂| 怀仁县| 桃源县| 阿坝县| 安溪县| 木里| 连平县| 呼和浩特市| 临颍县| 阿勒泰市| 岳池县| 新民市| 雷州市| 东乌珠穆沁旗| 通辽市| 揭阳市| 葫芦岛市| 宜阳县| 泸西县| 鞍山市| 双鸭山市| 六枝特区| 江孜县| 印江| 图木舒克市| 黑山县| 西乌珠穆沁旗| 利津县| 葫芦岛市| 宁夏| 应用必备| 广灵县| 玉屏| 通许县| 溧阳市|