Android 通用json解析方法

来源:互联网 发布:国内源码交易平台 编辑:程序博客网 时间:2024/06/05 08:50
我在android端解析Json一般是把它包装到HashMap中的,这样就不用定义那么多JavaBean了。
大家如果也使用这种方式。欢迎回复交流
代码片段,双击复制
01
02
03
04
05
06
publicMap<String,Object> parseJson(String json){
GsonBuilder gsonBuilder = newGsonBuilder();
                gsonBuilder.registerTypeAdapter(Object.class,newNaturalDeserializer());
                Gson gson = gsonBuilder.create();
return  gson.fromJson(json, HashMap.class);
}


01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
 * 解析 服务器返回的json时使用的解析器
 * @author feicien
 *
 */
publicclass NaturalDeserializer implementsJsonDeserializer<Object> {
 
        @Override
        publicObject deserialize(JsonElement json, Type typeOfT,
                        JsonDeserializationContext context) throwsJsonParseException {
                if(json.isJsonNull()) {
                        returnnull;
                }elseif (json.isJsonPrimitive()) {
                        returnhandlePrimitive(json.getAsJsonPrimitive());
                }elseif (json.isJsonArray()) {
                        returnhandleArray(json.getAsJsonArray(), context);
                }else{
                        returnhandleObject(json.getAsJsonObject(), context);
                }
 
        }
 
        privateObject handleObject(JsonObject json,
                        JsonDeserializationContext context) {
                Map<String, Object> map = newHashMap<String, Object>();
                for(Map.Entry<String, JsonElement> entry : json.entrySet())
                        map.put(entry.getKey(),
                                        context.deserialize(entry.getValue(), Object.class));
                returnmap;
        }
 
        privateObject handleArray(JsonArray json,
                        JsonDeserializationContext context) {
                List<Object> array = newArrayList<Object>();
                intlength = json.size();
                for(inti = 0; i < length; i++) {
                        array.add(context.deserialize(json.get(i), Object.class));
                }
                returnarray;
        }
 
        privateObject handlePrimitive(JsonPrimitive json) {
                if(json.isBoolean())
                        returnjson.getAsBoolean();
                elseif (json.isString())
                        returnjson.getAsString();
                else{
                        BigDecimal bigDec = json.getAsBigDecimal();
                        // Find out if it is an int type
                        try{
                                bigDec.toBigIntegerExact();
                                try{
                                        returnbigDec.intValueExact();
                                }catch(ArithmeticException e) {
                                }
                                returnbigDec.longValue();
                        }catch(ArithmeticException e) {
                        }
                        // Just return it as a double
                        returnbigDec.doubleValue();
                }
        }
 
}

0 0