1313
1414public class JSONTest {
1515 private JSON json = new fastjsonJSON ();
16+
1617 @ Test
1718 public void testEncoding () {
18- WritableJSONObject jsonObject = json .newObject ();
19- jsonObject .set ("name" , "webee.易" );
20- jsonObject .set ("age" , 27 );
21- jsonObject .set ("address" , null );
22- jsonObject .set ("height" , 1.74 );
23- jsonObject .set ("graduated" , true );
24- jsonObject .set ("languages" , new Object []{"java" , "python" , "golang" , null });
19+ int age = 27 ;
20+ double javaScore = 80. ;
21+ JSONObject jsonObject = genJsonObject (age , javaScore );
2522
26- WritableJSONObject scores = json .newObject ();
27- scores .set ("java" , 80 );
28- scores .set ("python" , 85.0 );
29- scores .set ("golang" , 82.5 );
30- scores .set ("xxx" , null );
31- jsonObject .set ("scores" , scores );
32-
33- Assert .assertEquals (jsonObject .getString ("name" ), "webee.易" );
34- Assert .assertEquals (jsonObject .getInteger ("age" ), Integer .valueOf (27 ));
35- Assert .assertEquals (jsonObject .getDouble ("height" ), Double .valueOf (1.74 ));
36- Assert .assertEquals (jsonObject .getString ("address" ), null );
37- Assert .assertEquals (jsonObject .isNull ("address" ), true );
38- Assert .assertEquals (jsonObject .getBoolean ("graduated" ), true );
39- Assert .assertEquals (jsonObject .getArray ("languages" ).getString (0 ), "java" );
40- Assert .assertEquals (jsonObject .getArray ("languages" ).getString (3 ), null );
41- Assert .assertEquals (jsonObject .getArray ("languages" ).isNull (3 ), true );
42- Assert .assertEquals (jsonObject .getObject ("scores" ).getDouble ("java" ), Double .valueOf (80 ));
43- Assert .assertEquals (jsonObject .getObject ("scores" ).getDouble ("xxx" ), null );
44- Assert .assertEquals (jsonObject .getObject ("scores" ).isNull ("xxx" ), true );
23+ doAssets (jsonObject , age , javaScore );
4524
4625 //System.out.println(jsonObject.get("languages").getClass());
4726 //System.out.println(jsonObject.get("scores").getClass());
@@ -50,21 +29,12 @@ public void testEncoding() {
5029
5130 @ Test
5231 public void testDecoding () {
53- String text = "{\" address\" :null,\" age\" :27,\" graduated\" :true,\" height\" :1.74,\" languages\" :[\" java\" ,\" python\" ,\" golang\" ,null],\" name\" :\" webee.易\" ,\" scores\" :{\" golang\" :82.5,\" java\" :80,\" python\" :85,\" xxx\" :null}}" ;
32+ int age = 27 ;
33+ double javaScore = 80. ;
34+ String text = genJsonObject (age , javaScore ).toJSONString ();
5435 JSONObject jsonObject = json .parseObject (text );
5536
56- Assert .assertEquals (jsonObject .getString ("name" ), "webee.易" );
57- Assert .assertEquals (jsonObject .getInteger ("age" ), Integer .valueOf (27 ));
58- Assert .assertEquals (jsonObject .getDouble ("height" ), Double .valueOf (1.74 ));
59- Assert .assertEquals (jsonObject .isNull ("address" ), true );
60- Assert .assertEquals (jsonObject .getString ("address" ), null );
61- Assert .assertEquals (jsonObject .getBoolean ("graduated" ), true );
62- Assert .assertEquals (jsonObject .getArray ("languages" ).getString (0 ), "java" );
63- Assert .assertEquals (jsonObject .getArray ("languages" ).getString (3 ), null );
64- Assert .assertEquals (jsonObject .getArray ("languages" ).isNull (3 ), true );
65- Assert .assertEquals (jsonObject .getObject ("scores" ).getDouble ("java" ), Double .valueOf (80 ));
66- Assert .assertEquals (jsonObject .getObject ("scores" ).getDouble ("xxx" ), null );
67- Assert .assertEquals (jsonObject .getObject ("scores" ).isNull ("xxx" ), true );
37+ doAssets (jsonObject , age , javaScore );
6838 }
6939
7040 @ Test
@@ -98,4 +68,102 @@ public void testEmoji() {
9868 jsonObject .set ("key" , value );
9969 Assert .assertEquals (jsonObject .getString ("key" ), value );
10070 }
71+
72+ @ Test
73+ public void testEncodingPerf () {
74+ int count = 10000 ;
75+ long ts = 0 ;
76+ long dMax = 0 ;
77+ long dMin = Long .MAX_VALUE ;
78+ for (int i = 0 ; i <= count ; i ++) {
79+ int age = i + 20 ;
80+ double javaScore = i + 60. ;
81+ long ss = System .nanoTime ();
82+ JSONObject jsonObject = genJsonObject (age , javaScore );
83+
84+ doAssets (jsonObject , age , javaScore );
85+
86+ long ee = System .nanoTime ();
87+ long d = ee - ss ;
88+ if (i > 0 ) {
89+ // 忽略第一次
90+ ts += d ;
91+ dMax = Math .max (dMax , d );
92+ dMin = Math .min (dMin , d );
93+ }
94+ System .out .println (String .format ("%d: %f" , i , d /1000000. ));
95+ }
96+ System .out .println (String .format ("total: %f" , ts /1000000. ));
97+ System .out .println (String .format ("avg: %f" , ts /1000000. /count ));
98+ System .out .println (String .format ("max: %f" , dMax /1000000. ));
99+ System .out .println (String .format ("min: %f" , dMin /1000000. ));
100+ }
101+
102+ @ Test
103+ public void testDecodingPerf () {
104+ int count = 10000 ;
105+ long ts = 0 ;
106+ long dMax = 0 ;
107+ long dMin = Long .MAX_VALUE ;
108+ for (int i = 0 ; i <= count ; i ++) {
109+ int age = i + 20 ;
110+ double javaScore = i + 60. ;
111+ String text = genJsonObject (age , javaScore ).toJSONString ();
112+ long ss = System .nanoTime ();
113+ JSONObject jsonObject = new fastjsonJSON ().parseObject (text );
114+
115+ doAssets (jsonObject , age , javaScore );
116+
117+ long ee = System .nanoTime ();
118+ long d = ee - ss ;
119+ if (i > 0 ) {
120+ // 忽略第一次
121+ ts += d ;
122+ dMax = Math .max (dMax , d );
123+ dMin = Math .min (dMin , d );
124+ }
125+ System .out .println (String .format ("%d: %f" , i , d /1000000. ));
126+ }
127+ System .out .println (String .format ("total: %f" , ts /1000000. ));
128+ System .out .println (String .format ("avg: %f" , ts /1000000. /count ));
129+ System .out .println (String .format ("max: %f" , dMax /1000000. ));
130+ System .out .println (String .format ("min: %f" , dMin /1000000. ));
131+ }
132+
133+ private JSONObject genJsonObject (int age , double javaScore ) {
134+ WritableJSONObject jsonObject = new fastjsonJSON ().newObject ();
135+ jsonObject .set ("name" , "webee.易" );
136+ jsonObject .set ("age" , age );
137+ jsonObject .set ("address" , null );
138+ jsonObject .set ("height" , 1.74 );
139+ jsonObject .set ("graduated" , true );
140+ jsonObject .set ("long.max" , Long .MAX_VALUE );
141+ jsonObject .set ("languages" , new Object []{"java" , "python" , "golang" , null });
142+
143+ WritableJSONObject scores = json .newObject ();
144+ scores .set ("java" , javaScore );
145+ scores .set ("python" , 85.0 );
146+ scores .set ("golang" , 82.5 );
147+ scores .set ("xxx" , null );
148+ jsonObject .set ("scores" , scores );
149+
150+ return jsonObject ;
151+ }
152+
153+ private void doAssets (JSONObject jsonObject , int age , double javaScore ) {
154+ Assert .assertEquals (jsonObject .getString ("name" ), "webee.易" );
155+ Assert .assertEquals (jsonObject .getInteger ("age" ), Integer .valueOf (age ));
156+ Assert .assertEquals (jsonObject .getDouble ("height" ), Double .valueOf (1.74 ));
157+ Assert .assertEquals (jsonObject .getString ("address" ), null );
158+ Assert .assertEquals (jsonObject .isNull ("address" ), true );
159+ Assert .assertEquals (jsonObject .getBoolean ("graduated" ), true );
160+ Assert .assertEquals (jsonObject .getLong ("long.max" ), Long .valueOf (Long .MAX_VALUE ));
161+ Assert .assertEquals (jsonObject .getArray ("languages" ).getString (0 ), "java" );
162+ Assert .assertEquals (jsonObject .getArray ("languages" ).getString (3 ), null );
163+ Assert .assertEquals (jsonObject .getArray ("languages" ).isNull (3 ), true );
164+ Assert .assertEquals (jsonObject .getObject ("scores" ).getDouble ("java" ), Double .valueOf (javaScore ));
165+ Assert .assertEquals (jsonObject .getObject ("scores" ).getDouble ("xxx" ), null );
166+ Assert .assertEquals (jsonObject .getObject ("scores" ).isNull ("xxx" ), true );
167+ }
168+
101169}
0 commit comments