紫風(fēng)亂寫(xiě)

          除了他眼前的屏幕,這個(gè)人什么也沒(méi)看見(jiàn)。
          被周?chē)碾娔X簇?fù)碇?,他只知道他所?chuàng)造的現(xiàn)實(shí),但又意識(shí)到那是虛幻。
          他已經(jīng)超越了技術(shù)。也超越了機(jī)器。
          posts - 62, comments - 93, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

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

          ?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



          評(píng)論

          # json的確不行。  回復(fù)  更多評(píng)論   

          2006-10-08 13:51 by lvcha
          效率和健壯性都不行。
          不考慮效率可以用xml,xstream還是很健壯的,我寫(xiě)了個(gè)C#的實(shí)現(xiàn)。
          我自己寫(xiě)了個(gè)二進(jìn)制流的(java<-->c#),性能相對(duì)xml和json好一些。
          可以擴(kuò)展成支持其他語(yǔ)言的,因?yàn)槎M(jìn)制流是個(gè)中間格式。
          http://java-cs-bridge.sourceforge.net/

          # re: 對(duì)JSON幾個(gè)實(shí)現(xiàn)的測(cè)試和總結(jié)  回復(fù)  更多評(píng)論   

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

          # re: 對(duì)JSON幾個(gè)實(shí)現(xiàn)的測(cè)試和總結(jié)  回復(fù)  更多評(píng)論   

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

          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 平定县| 怀柔区| 陕西省| 洞口县| 雷波县| 铁岭县| 花莲县| 兴安县| 阳城县| 将乐县| 临沂市| 嘉禾县| 文山县| 龙门县| 祁阳县| 江油市| 嘉鱼县| 扎囊县| 潜江市| 邵阳县| 郎溪县| 峨边| 封开县| 新昌县| 唐海县| 惠水县| 双桥区| 中阳县| 炉霍县| 壶关县| 文昌市| 昆山市| 普宁市| 乳源| 邓州市| 阳朔县| 平罗县| 呼和浩特市| 花垣县| 常宁市| 家居|