很多时候,我们从后台拿到的数据都不是我们想要的格式,这个时候就要对这些数据进行解析,那么,如何拿到我想要的数据呢?
1. Gson解析json
这里首先要配置对应的maven
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.2</version>
</dependency>
如果是在Android Studio中使用,直接在build.gradle中的dependencies中添加:
implementation 'com.google.code.gson:gson:2.8.2'
一般从后台获取的数据是这样的:
String res= response.body().string();
创建了gson对象,将json字符转化为map对象,直接通过map取值就好了:
Gson gson = new Gson();
Map map = gson.fromJson(res, Map.class);
当然,这个fromJson其实是反序列化,序列化是toJson,有兴趣的可以研究研究。
假设我有这么一个json数据,那么实际操作就是:
String json = {
"name":"hsl",
"age":18
};
Gson gson = new Gson();
Map map = gson.fromJson(json, Map.class);
Log.w(TAG,map.get("name"));
Log.w(TAG,map.get("age"));
这里需要提醒的一点是,使用gson时,如果我们需要的数据是整型,可能这里会有点问题,需要处理一下。因为gson默认会将所有的number类型处理成double,关于这个问题的解决方案,后续会补充上。
不过,下面这种方法就不存在这种问题哦!
2. fastjson解析json
与上面的 一样,先要添加maven,不同的是,Gson是goole的,而fastjson是阿里的,不过这两种解析json数据的方法都挺好用的。
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.41</version>
</dependency>
Android studio里添加这个:
implementation 'com.alibaba:fastjson:1.2.41'
与上面的类似,怎么取出我想要的数据呢?
String responseBody = response.body().string();
final JSONObject obj = JSON.parseObject(responseBody);
举个小例子:
String json = {
"name":"hsl",
"age":18
};
JSONObject obj = JSON.parseObject(json );
Log.e(Tag,obj.getString("name"));
Log.e(Tag,obj.get("age"));