紫風亂寫

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

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

          Posted on 2006-10-03 17:45 Justfly Shi 閱讀(3144) 評論(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

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


          網站導航:
           
          主站蜘蛛池模板: 盐城市| 澎湖县| 鹤山市| 宜兰县| 宁武县| 安康市| 自贡市| 屯留县| 黄梅县| 三亚市| 纳雍县| 民勤县| 合水县| 灵台县| 贵定县| 合山市| 泸州市| 阳江市| 鄄城县| 定远县| 乌兰浩特市| 隆化县| 台北县| 班戈县| 铜鼓县| 武川县| 湟源县| 泰顺县| 屏东县| 长兴县| 中江县| 泊头市| 莱阳市| 梓潼县| 乌恰县| 本溪| 新绛县| 哈尔滨市| 安仁县| 山阴县| 锦州市|