Posted on 2006-10-03 17:45
Justfly Shi 閱讀(3144)
評(píng)論(3) 編輯 收藏
由于最近需要通過(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