Android 通用json解析方法

我在android端解析Json一般是把它包装到HashMap中的,这样就不用定义那么多JavaBean了。
大家如果也使用这种方式。欢迎回复交流
代码片段,双击复制
01
02
03
04
05
06
public Map<String,Object> parseJson(String json){
GsonBuilder gsonBuilder = new GsonBuilder();
                gsonBuilder.registerTypeAdapter(Object. class , new NaturalDeserializer());
                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
  *
  */
public class NaturalDeserializer implements JsonDeserializer<Object> {
 
        @Override
        public Object deserialize(JsonElement json, Type typeOfT,
                        JsonDeserializationContext context) throws JsonParseException {
                if (json.isJsonNull()) {
                        return null ;
                } else if (json.isJsonPrimitive()) {
                        return handlePrimitive(json.getAsJsonPrimitive());
                } else if (json.isJsonArray()) {
                        return handleArray(json.getAsJsonArray(), context);
                } else {
                        return handleObject(json.getAsJsonObject(), context);
                }
 
        }
 
        private Object handleObject(JsonObject json,
                        JsonDeserializationContext context) {
                Map<String, Object> map = new HashMap<String, Object>();
                for (Map.Entry<String, JsonElement> entry : json.entrySet())
                        map.put(entry.getKey(),
                                        context.deserialize(entry.getValue(), Object. class ));
                return map;
        }
 
        private Object handleArray(JsonArray json,
                        JsonDeserializationContext context) {
                List<Object> array = new ArrayList<Object>();
                int length = json.size();
                for ( int i = 0 ; i < length; i++) {
                        array.add(context.deserialize(json.get(i), Object. class ));
                }
                return array;
        }
 
        private Object handlePrimitive(JsonPrimitive json) {
                if (json.isBoolean())
                        return json.getAsBoolean();
                else if (json.isString())
                        return json.getAsString();
                else {
                        BigDecimal bigDec = json.getAsBigDecimal();
                        // Find out if it is an int type
                        try {
                                bigDec.toBigIntegerExact();
                                try {
                                        return bigDec.intValueExact();
                                } catch (ArithmeticException e) {
                                }
                                return bigDec.longValue();
                        } catch (ArithmeticException e) {
                        }
                        // Just return it as a double
                        return bigDec.doubleValue();
                }
        }
 
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值