Skip to content

Commit 7ef7b26

Browse files
committed
完善 JSON 处理,所有流程类都实现默认 JSON 的序列化和反序列化
1 parent 6712e96 commit 7ef7b26

12 files changed

Lines changed: 464 additions & 128 deletions

APIJSONORM/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
<groupId>com.github.Tencent</groupId>
77
<artifactId>APIJSON</artifactId>
8-
<version>7.9.0</version>
8+
<version>8.0.0</version>
99
<packaging>jar</packaging>
1010

1111
<name>APIJSONORM</name>

APIJSONORM/src/main/java/apijson/JSON.java

Lines changed: 31 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -16,57 +16,57 @@
1616
/**JSON工具类 防止解析时异常
1717
* @author Lemon
1818
*/
19-
public interface JSON {
19+
public class JSON {
2020
static final String TAG = "JSON";
2121

22-
JSONParser<? extends Map<String, Object>, ? extends List<Object>> DEFAULT_JSON_PARSER = new JSONParser<>() {
22+
public static JSONParser<? extends Map<String, Object>, ? extends List<Object>> DEFAULT_JSON_PARSER = new JSONParser<JSONObject, JSONArray>() {
2323

2424
@Override
25-
public Map<String, Object> parseJSON(Object json) {
26-
return Map.of();
25+
public JSONObject createJSONObject() {
26+
return new JSONObject();
2727
}
2828

2929
@Override
30-
public Map<String, Object> parseObject(Object json) {
31-
return Map.of();
30+
public JSONArray createJSONArray() {
31+
return new JSONArray();
3232
}
3333

3434
@Override
35-
public <T> T parseObject(Object json, Class<T> clazz) {
36-
return null;
35+
public String toJSONString(Object obj) {
36+
return JSON.toJSONString(obj);
3737
}
3838

3939
@Override
40-
public List<Object> parseArray(Object json) {
41-
return List.of();
40+
public Object parseJSON(Object json) {
41+
throw new UnsupportedOperationException();
4242
}
4343

4444
@Override
45-
public <T> List<T> parseArray(Object json, Class<T> clazz) {
46-
return List.of();
45+
public JSONObject parseObject(Object json) {
46+
throw new UnsupportedOperationException();
4747
}
4848

49-
//
5049
@Override
51-
public String toJSONString(Object obj) {
52-
return JSON.toJSONString(obj);
50+
public <T> T parseObject(Object json, Class<T> clazz) {
51+
throw new UnsupportedOperationException();
5352
}
5453

5554
@Override
56-
public Map<String, Object> createJSONObject() {
57-
return new LinkedHashMap<>();
55+
public JSONArray parseArray(Object json) {
56+
throw new UnsupportedOperationException();
5857
}
5958

6059
@Override
61-
public List<Object> createJSONArray() {
62-
return new ArrayList<>();
60+
public <T> List<T> parseArray(Object json, Class<T> clazz) {
61+
throw new UnsupportedOperationException();
6362
}
63+
6464
};
6565

6666
public static JSONCreator<? extends Map<String, Object>, ? extends List<Object>> DEFAULT_JSON_CREATOR = DEFAULT_JSON_PARSER;
6767

6868

69-
public static Object parseJSON(Object json) throws Exception {
69+
public static Object parseJSON(Object json) {
7070
if (json instanceof Boolean || json instanceof Number || json instanceof Enum<?>) {
7171
return json;
7272
}
@@ -80,7 +80,7 @@ public static Object parseJSON(Object json) throws Exception {
8080
return parseArray(json, DEFAULT_JSON_PARSER);
8181
}
8282

83-
throw new UnsupportedDataTypeException("JSON 格式错误!" + s);
83+
throw new IllegalArgumentException("JSON 格式错误!" + s);
8484
}
8585

8686
/**
@@ -96,27 +96,18 @@ public static <M extends Map<String, Object>, L extends List<Object>> M parseObj
9696
return null;
9797
}
9898

99-
try {
100-
M obj = parser.parseObject(s);
101-
return obj;
102-
} catch (Exception e) {
103-
Log.i(TAG, "parseObject catch \n" + e.getMessage());
104-
}
105-
return null;
99+
return parser.parseObject(s);
100+
}
101+
public static <T> T parseObject(Object json, Class<T> clazz) {
102+
return parseObject(json, clazz, DEFAULT_JSON_PARSER);
106103
}
107104
public static <T, M extends Map<String, Object>, L extends List<Object>> T parseObject(Object json, Class<T> clazz, JSONParser<M, L> parser) {
108105
String s = toJSONString(json);
109106
if (StringUtil.isEmpty(s, true)) {
110107
return null;
111108
}
112109

113-
try {
114-
T obj = parser.parseObject(s, clazz);
115-
return obj;
116-
} catch (Exception e) {
117-
Log.i(TAG, "parseObject catch \n" + e.getMessage());
118-
}
119-
return null;
110+
return parser.parseObject(s, clazz);
120111
}
121112

122113
/**
@@ -142,18 +133,17 @@ public static <M extends Map<String, Object>, L extends List<Object>> L parseArr
142133
return null;
143134
}
144135

145-
// public static <T, M extends Map<String, Object>> List<T> parseArray(Object json, Class<T> clazz) {
146-
// return parseArray(json, clazz, DEFAULT_JSON_PARSER);
147-
// }
148-
public static <T, M extends Map<String, Object>> List<T> parseArray(Object json, Class<T> clazz, JSONParser<M, List<Object>> parser) {
136+
public static <T> List<T> parseArray(Object json, Class<T> clazz) {
137+
return parseArray(json, clazz, DEFAULT_JSON_PARSER);
138+
}
139+
public static <T, M extends Map<String, Object>, L extends List<Object>> List<T> parseArray(Object json, Class<T> clazz, JSONParser<M, L> parser) {
149140
String s = toJSONString(json);
150141
if (StringUtil.isEmpty(s, true)) {
151142
return null;
152143
}
153144

154145
try {
155-
List<T> arr = parser.parseArray(s, clazz);
156-
return arr;
146+
return parser.parseArray(s, clazz);
157147
} catch (Exception e) {
158148
Log.i(TAG, "parseArray catch \n" + e.getMessage());
159149
}

APIJSONORM/src/main/java/apijson/JSONArray.java

Lines changed: 168 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,7 @@
44

55
package apijson;
66

7-
import java.util.ArrayList;
8-
import java.util.Collection;
9-
import java.util.List;
10-
import java.util.Map;
7+
import java.util.*;
118

129
import apijson.orm.exception.UnsupportedDataTypeException;
1310

@@ -16,23 +13,25 @@
1613
* Maintains same API as fastjson but uses standard Java List implementation
1714
* @author Lemon
1815
*/
19-
public class JSONArray extends ArrayList<Object> implements JSON {
20-
private static final long serialVersionUID = 1L;
16+
public class JSONArray extends JSON implements List<Object> {
2117
private static final String TAG = "JSONArray";
22-
18+
19+
private ArrayList<Object> list = new ArrayList<>();
2320
/**
2421
* Create an empty JSONArray
2522
*/
2623
public JSONArray() {
2724
super();
2825
}
29-
26+
27+
private int initialCapacity = 10;
3028
/**
3129
* Create a JSONArray with initial capacity
3230
* @param initialCapacity the initial capacity
3331
*/
3432
public JSONArray(int initialCapacity) {
35-
super(initialCapacity);
33+
this.initialCapacity = initialCapacity;
34+
this.list = new ArrayList<>(initialCapacity);
3635
}
3736

3837
/**
@@ -218,4 +217,163 @@ public JSONArray fluentAdd(Object obj) {
218217
public String toString() {
219218
return JSON.toJSONString(this);
220219
}
221-
}
220+
221+
@Override
222+
public int size() {
223+
return list.size();
224+
}
225+
226+
@Override
227+
public boolean isEmpty() {
228+
return list.isEmpty();
229+
}
230+
231+
@Override
232+
public boolean contains(Object o) {
233+
return list.contains(o);
234+
}
235+
236+
@Override
237+
public Iterator<Object> iterator() {
238+
return list.iterator();
239+
}
240+
241+
@Override
242+
public Object[] toArray() {
243+
return list.toArray();
244+
}
245+
246+
@Override
247+
public <T> T[] toArray(T[] a) {
248+
return list.toArray(a);
249+
}
250+
251+
@Override
252+
public boolean add(Object o) {
253+
return list.add(o);
254+
}
255+
256+
@Override
257+
public boolean remove(Object o) {
258+
return list.remove(o);
259+
}
260+
261+
@Override
262+
public boolean containsAll(Collection<?> c) {
263+
if (c == null || c.isEmpty()) {
264+
return true;
265+
}
266+
return list.containsAll(c);
267+
}
268+
269+
@Override
270+
public boolean addAll(Collection<?> c) {
271+
if (c == null || c.isEmpty()) {
272+
return true;
273+
}
274+
return list.addAll(c);
275+
}
276+
277+
@Override
278+
public boolean addAll(int index, Collection<?> c) {
279+
int sz = size();
280+
if (index < 0) {
281+
index += sz;
282+
}
283+
284+
if (c == null || c.isEmpty()) {
285+
return true;
286+
}
287+
return list.addAll(index, c);
288+
}
289+
290+
@Override
291+
public boolean removeAll(Collection<?> c) {
292+
if (c == null || c.isEmpty()) {
293+
return true;
294+
}
295+
return list.removeAll(c);
296+
}
297+
298+
@Override
299+
public boolean retainAll(Collection<?> c) {
300+
if (c == null || c.isEmpty()) {
301+
return true;
302+
}
303+
return list.retainAll(c);
304+
}
305+
306+
@Override
307+
public void clear() {
308+
list.clear();
309+
}
310+
311+
@Override
312+
public Object get(int index) {
313+
int sz = size();
314+
if (index < 0) {
315+
index += sz;
316+
}
317+
318+
return list.get(index);
319+
}
320+
321+
@Override
322+
public Object set(int index, Object element) {
323+
return list.set(index, element);
324+
}
325+
326+
@Override
327+
public void add(int index, Object element) {
328+
list.add(index, element);
329+
}
330+
331+
@Override
332+
public Object remove(int index) {
333+
int sz = size();
334+
if (index < 0) {
335+
index += sz;
336+
}
337+
if (index >= sz) {
338+
return null;
339+
}
340+
341+
return list.remove(index);
342+
}
343+
344+
@Override
345+
public int indexOf(Object o) {
346+
return list.indexOf(o);
347+
}
348+
349+
@Override
350+
public int lastIndexOf(Object o) {
351+
return list.lastIndexOf(o);
352+
}
353+
354+
@Override
355+
public ListIterator<Object> listIterator() {
356+
return list.listIterator();
357+
}
358+
359+
@Override
360+
public ListIterator<Object> listIterator(int index) {
361+
int sz = size();
362+
if (index < 0) {
363+
index += sz;
364+
}
365+
366+
return list.listIterator(index);
367+
}
368+
369+
@Override
370+
public List<Object> subList(int fromIndex, int toIndex) {
371+
if (fromIndex < 0) {
372+
fromIndex += size();
373+
}
374+
if (toIndex < 0) {
375+
toIndex += size();
376+
}
377+
return list.subList(fromIndex, toIndex);
378+
}
379+
}

0 commit comments

Comments
 (0)