Skip to content

Commit 6ccbd2a

Browse files
committed
upgrade api to v2.2.0, update tests.
1 parent 0b2b175 commit 6ccbd2a

File tree

4 files changed

+127
-41
lines changed

4 files changed

+127
-41
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ To install the library add:
1414
maven { url "https://jitpack.io" }
1515
}
1616
dependencies {
17-
compile 'com.github.webee:fastjson-json-api-android:v2.1.0'
17+
compile 'com.github.webee:fastjson-json-api-android:v2.2.0'
1818
}
1919
```

fastjson-json-api-android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ dependencies {
3232
})
3333
compile 'com.android.support:appcompat-v7:24.2.1'
3434
compile 'com.alibaba:fastjson:1.1.55.android'
35-
compile 'com.github.webee:java-json-api:v2.1.0'
35+
compile 'com.github.webee:java-json-api:v2.2.0'
3636
testCompile 'junit:junit:4.12'
3737
}
3838

fastjson-json-api-android/src/main/java/com/github/webee/fastjson/fastjsonJSON.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,12 @@
11
package com.github.webee.fastjson;
22

3+
import com.alibaba.fastjson.JSON;
4+
import com.alibaba.fastjson.serializer.JSONSerializer;
5+
import com.alibaba.fastjson.serializer.SerializeConfig;
6+
import com.alibaba.fastjson.serializer.SerializeWriter;
7+
import com.alibaba.fastjson.serializer.SerializerFeature;
8+
9+
import java.io.Writer;
310
import java.util.Arrays;
411
import java.util.Map;
512

@@ -28,6 +35,17 @@ public com.github.webee.json.WritableJSONArray newArray(Object[] array) {
2835
return new WritableJSONArray(new com.alibaba.fastjson.JSONArray(Arrays.asList(array)));
2936
}
3037

38+
@Override
39+
public String serialize(Object value) {
40+
SerializeWriter out = new SerializeWriter((Writer) null, JSON.DEFAULT_GENERATE_FEATURE, new SerializerFeature[]{SerializerFeature.WriteMapNullValue});
41+
try {
42+
new JSONSerializer(out, SerializeConfig.globalInstance).write(value);
43+
return out.toString();
44+
} finally {
45+
out.close();
46+
}
47+
}
48+
3149
@Override
3250
public Object parse(String text) {
3351
Object value = com.alibaba.fastjson.JSON.parse(text);

fastjson-json-api-android/src/test/java/com/github/webee/fastjson/JSONTest.java

Lines changed: 107 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -13,35 +13,14 @@
1313

1414
public 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

Comments
 (0)