Skip to content

Commit bd5161f

Browse files
committed
优化 JSON 相关序列化、反序列化等处理;class JSONObject 改为 interface JSONMap<M, L>,class JSONArray 改为 interface JSONList<M, L>;所有 APIJSONCreator, JSONCreator, JSONParser 都集中处理,避免不一致导致的 ClassCastException
1 parent 4fed749 commit bd5161f

19 files changed

+1664
-1819
lines changed

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

+76-96
Original file line numberDiff line numberDiff line change
@@ -4,67 +4,77 @@
44

55
package apijson;
66

7+
import java.util.Collection;
8+
import java.util.LinkedHashMap;
79
import java.util.List;
810
import java.util.Map;
911

1012
/**JSON工具类 防止解析时异常
1113
* @author Lemon
1214
*/
1315
public class JSON {
14-
public static Class<?> JSON_OBJECT_CLASS = JSONObject.class;
15-
public static Class<?> JSON_ARRAY_CLASS = JSONArray.class;
1616

1717
static final String TAG = "JSON";
1818

1919
public static JSONParser<? extends Map<String, Object>, ? extends List<Object>> DEFAULT_JSON_PARSER;
2020

2121
static {
22-
DEFAULT_JSON_PARSER = new JSONParser<JSONObject, JSONArray>() {
23-
24-
@Override
25-
public JSONObject createJSONObject() {
26-
return new JSONObject();
27-
}
28-
29-
@Override
30-
public JSONArray createJSONArray() {
31-
return new JSONArray();
32-
}
33-
34-
@Override
35-
public String toJSONString(Object obj, boolean format) {
36-
throw new UnsupportedOperationException();
37-
}
38-
39-
@Override
40-
public Object parseJSON(Object json) {
41-
throw new UnsupportedOperationException();
42-
}
43-
44-
@Override
45-
public JSONObject parseObject(Object json) {
46-
throw new UnsupportedOperationException();
47-
}
48-
49-
@Override
50-
public <T> T parseObject(Object json, Class<T> clazz) {
51-
throw new UnsupportedOperationException();
52-
}
53-
54-
@Override
55-
public JSONArray parseArray(Object json) {
56-
throw new UnsupportedOperationException();
57-
}
58-
59-
@Override
60-
public <T> List<T> parseArray(Object json, Class<T> clazz) {
61-
throw new UnsupportedOperationException();
62-
}
22+
//DEFAULT_JSON_PARSER = new JSONParser<LinkedHashMap<String, Object>, List<Object>>() {
23+
//
24+
// @Override
25+
// public LinkedHashMap<String, Object> createJSONObject() {
26+
// throw new UnsupportedOperationException();
27+
// }
28+
//
29+
// @Override
30+
// public List<Object> createJSONArray() {
31+
// throw new UnsupportedOperationException();
32+
// }
33+
//
34+
// @Override
35+
// public String toJSONString(Object obj, boolean format) {
36+
// throw new UnsupportedOperationException();
37+
// }
38+
//
39+
// @Override
40+
// public Object parse(Object json) {
41+
// throw new UnsupportedOperationException();
42+
// }
43+
//
44+
// @Override
45+
// public LinkedHashMap<String, Object> parseObject(Object json) {
46+
// throw new UnsupportedOperationException();
47+
// }
48+
//
49+
// @Override
50+
// public <T> T parseObject(Object json, Class<T> clazz) {
51+
// throw new UnsupportedOperationException();
52+
// }
53+
//
54+
// @Override
55+
// public List<Object> parseArray(Object json) {
56+
// throw new UnsupportedOperationException();
57+
// }
58+
//
59+
// @Override
60+
// public <T> List<T> parseArray(Object json, Class<T> clazz) {
61+
// throw new UnsupportedOperationException();
62+
// }
63+
//
64+
//};
6365

64-
};
6566
}
6667

6768
// public static JSONCreator<? extends Map<String, Object>, ? extends List<Object>> DEFAULT_JSON_CREATOR = DEFAULT_JSON_PARSER;
69+
// public static <M extends Map<String, Object>> M newObj() {
70+
// return createJSONObject();
71+
// }
72+
// public static <M extends Map<String, Object>> M newObj(String key, Object value) {
73+
// return createJSONObject(key, value);
74+
// }
75+
// public static <M extends Map<String, Object>> M newObj(Map<? extends String, ?> map) {
76+
// return createJSONObject(map);
77+
// }
6878

6979
public static <M extends Map<String, Object>> M createJSONObject() {
7080
return (M) DEFAULT_JSON_PARSER.createJSONObject();
@@ -76,87 +86,61 @@ public static <M extends Map<String, Object>> M createJSONObject(Map<? extends S
7686
return (M) DEFAULT_JSON_PARSER.createJSONObject(map);
7787
}
7888

89+
//public static <L extends List<Object>> L newArr() {
90+
// return createJSONArray();
91+
//}
92+
//public static <L extends List<Object>> L newArr(Object obj) {
93+
// return createJSONArray(obj);
94+
//}
95+
//public static <L extends List<Object>> L newArr(List<?> list) {
96+
// return createJSONArray(list);
97+
//}
98+
7999
public static <L extends List<Object>> L createJSONArray() {
80100
return (L) DEFAULT_JSON_PARSER.createJSONArray();
81101
}
82102
public static <L extends List<Object>> L createJSONArray(Object obj) {
83103
return (L) DEFAULT_JSON_PARSER.createJSONArray(obj);
84104
}
85-
public static <L extends List<Object>> L createJSONArray(List<?> list) {
105+
public static <L extends List<Object>> L createJSONArray(Collection<?> list) {
86106
return (L) DEFAULT_JSON_PARSER.createJSONArray(list);
87107
}
88108

89-
public static Object parseJSON(Object json) {
90-
if (json instanceof Boolean || json instanceof Number || json instanceof Enum<?>) {
91-
return json;
92-
}
93-
94-
String s = StringUtil.trim(toJSONString(json));
95-
if (s.startsWith("{")) {
96-
return parseObject(json, DEFAULT_JSON_PARSER);
97-
}
98-
99-
if (s.startsWith("[")) {
100-
return parseArray(json, DEFAULT_JSON_PARSER);
101-
}
102-
103-
try {
104-
return DEFAULT_JSON_PARSER.parseJSON(json);
105-
} catch (Throwable e) {
106-
throw new IllegalArgumentException("JSON 格式错误!" + e.getMessage() + "! " + s);
107-
}
109+
public static Object parse(Object json) {
110+
return DEFAULT_JSON_PARSER.parse(json);
108111
}
109112

110-
/**
111-
* @param json
112-
* @return
113-
*/
114-
public static <M extends Map<String, Object>> M parseObject(Object json) {
115-
return (M) parseObject(json, DEFAULT_JSON_PARSER);
116-
}
117113

118-
public static <M extends Map<String, Object>, L extends List<Object>> M parseObject(Object json, JSONParser<M, L> parser) {
114+
public static <M extends Map<String, Object>> M parseObject(Object json) {
119115
String s = toJSONString(json);
120116
if (StringUtil.isEmpty(s, true)) {
121117
return null;
122118
}
123119

124-
return parser.parseObject(s);
120+
return (M) DEFAULT_JSON_PARSER.parseObject(s);
125121
}
126122

127123
public static <T> T parseObject(Object json, Class<T> clazz) {
128-
return parseObject(json, clazz, DEFAULT_JSON_PARSER);
129-
}
130-
131-
public static <T, M extends Map<String, Object>, L extends List<Object>> T parseObject(Object json, Class<T> clazz, JSONParser<M, L> parser) {
132124
String s = toJSONString(json);
133125
if (StringUtil.isEmpty(s, true)) {
134126
return null;
135127
}
136128

137-
if (parser == null) {
138-
parser = (JSONParser<M, L>) DEFAULT_JSON_PARSER;
139-
}
140-
141-
return parser.parseObject(s, clazz);
129+
return DEFAULT_JSON_PARSER.parseObject(s, clazz);
142130
}
143131

144132
/**
145133
* @param json
146134
* @return
147135
*/
148136
public static <L extends List<Object>> L parseArray(Object json) {
149-
return (L) parseArray(json, DEFAULT_JSON_PARSER);
150-
}
151-
152-
public static <M extends Map<String, Object>, L extends List<Object>> L parseArray(Object json, JSONParser<M, L> parser) {
153137
String s = toJSONString(json);
154138
if (StringUtil.isEmpty(s, true)) {
155139
return null;
156140
}
157141

158142
try {
159-
L arr = parser.parseArray(s);
143+
L arr = (L) DEFAULT_JSON_PARSER.parseArray(s);
160144
return arr;
161145
} catch (Exception e) {
162146
Log.i(TAG, "parseArray catch \n" + e.getMessage());
@@ -165,17 +149,13 @@ public static <M extends Map<String, Object>, L extends List<Object>> L parseArr
165149
}
166150

167151
public static <T> List<T> parseArray(Object json, Class<T> clazz) {
168-
return parseArray(json, clazz, DEFAULT_JSON_PARSER);
169-
}
170-
171-
public static <T, M extends Map<String, Object>, L extends List<Object>> List<T> parseArray(Object json, Class<T> clazz, JSONParser<M, L> parser) {
172152
String s = toJSONString(json);
173153
if (StringUtil.isEmpty(s, true)) {
174154
return null;
175155
}
176156

177157
try {
178-
return parser.parseArray(s, clazz);
158+
return DEFAULT_JSON_PARSER.parseArray(s, clazz);
179159
} catch (Exception e) {
180160
Log.i(TAG, "parseArray catch \n" + e.getMessage());
181161
}
@@ -347,14 +327,14 @@ public static <L extends List<Object>> L getJSONArray(List<Object> list, int ind
347327
* @throws IllegalArgumentException If value is not a Map and cannot be converted
348328
*/
349329
@SuppressWarnings("unchecked")
350-
public static Map<String, Object> getMap(Map<String, Object> map, String key) throws IllegalArgumentException {
330+
public static <K, V> Map<K, V> getMap(Map<String, Object> map, String key) throws IllegalArgumentException {
351331
Object value = map == null || key == null ? null : map.get(key);
352332
if (value == null) {
353333
return null;
354334
}
355335

356336
if (value instanceof Map) {
357-
return (Map<String, Object>) value;
337+
return (Map<K, V>) value;
358338
}
359339

360340
throw new IllegalArgumentException("Value for key '" + key + "' is not a Map: " + value.getClass().getName());
@@ -368,14 +348,14 @@ public static Map<String, Object> getMap(Map<String, Object> map, String key) th
368348
* @throws IllegalArgumentException If value is not a List and cannot be converted
369349
*/
370350
@SuppressWarnings("unchecked")
371-
public static List<Object> getList(Map<String, Object> map, String key) throws IllegalArgumentException {
351+
public static <T> List<T> getList(Map<String, Object> map, String key) throws IllegalArgumentException {
372352
Object value = map == null || key == null ? null : map.get(key);
373353
if (value == null) {
374354
return null;
375355
}
376356

377357
if (value instanceof List) {
378-
return (List<Object>) value;
358+
return (List<T>) value;
379359
}
380360

381361
throw new IllegalArgumentException("Value for key '" + key + "' is not a List: " + value.getClass().getName());

0 commit comments

Comments
 (0)