很多時候,我們從後臺拿到的數據都不是我們想要的格式,這個時候就要對這些數據進行解析,那麼,如何拿到我想要的數據呢?
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"));