紫风乱写

除了他眼前的屏幕,这个人什么也没看见。
被周围的电脑簇拥着,他只知道他所创造的现实,但又意识到那是虚幻。
他已经超越了技术。也超越了机器。
posts - 62, comments - 93, trackbacks - 0, articles - 0
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

对JSON几个实现的测试和总结

Posted on 2006-10-03 17:45 Justfly Shi 阅读(3134) 评论(3)  编辑  收藏

  由于最近需要通过一种跨平台、跨语言的方式来传递需要多层嵌套的数据,因此研究了一下JSON。首先试用JSON-lib做一下测试,但是未能通过测试,于是再找其他几个Java实现,但是也未能通过测试。分别测试对于一个简单的类的序列化和反序列化,对于一个有数组和Map域的对象的序列化和反序列化。对于结果比较失望。
  其中的JSON-lib能通过第一个测试,第二个测试的时候则失败。但是有一个很大的bug,对于存在null域的对象反序列化的时候会失败。该bug已经在主页上了,但是不知道那个版本会修改。
  其中的StringTree只能revert回一个Map对象。而对于一个复杂的对象,则无法revert。在做第二个测试的时候总是停在那里不动了。
  其中的JSON-Tool根本就没有直接的序列化的功能。
  由于测试情况很不理想,因此只进行了两个测试,对于特殊字符、国际化的测试没有进行。
  
  结论:JSON的序列化和反序列化功能还不成熟。
  所有代码下载地址http://www.blogjava.net/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

只有注册用户登录后才能发表评论。


网站导航: