Gson
Gson相比android源生解析json数据的优势:
Gson使用方便,解析复杂数据简单(这里建议配合JsonFormat使用),是一种流行的解析json数据的方式。
解析步骤(类同于Android源生Json方式,Gson解析json数据也分为三步)
①.获取json数据(可以通过网络,可以通过本地)
②.解析json数据
1.导入依赖,加入Gson的包
dependencies {
implementation 'com.google.code.gson:gson:2.8.5'
}
2.设置Bean对象来接收对应的json数据
可以使用JsonFormat工具,首先得到在setting里下载JsonFormat工具,之后导入一段样例的json数据。jsonformat会帮助你自动生成对应的Bean对象
alt+insert
复制json数据
自动生成
3.使用Gson自带的方法fromjson方法解析数据
*首先new一个Gson对象
Gson gson = new Gson();
fromjson方法有两个参数
第一个参数 需要解析的json对象
第二个参数 json的数据类型,这里通过TypeToken来实现(最基本的要分清传入的json数据是数组(jsonArray)还是(jsonObject),如果是jsonArray对象,那么需要List<bean>
对象来接收,例如new TypeToken<List<WeatherBean>>
如果是jsonObject对象这里就只需要用如下方法)
Type type = new TypeToken<WeatherBean>(){}.getType();
weather = gson.fromJson(json,type);
③.显示json数据
得到解析完毕的weather即可直接调用或者使用方法调用其成员变量,即解析好的数据。
注:
规范写法或者需多次使用Gson时,可以把Gson解析的方法以及新建分装到一个类中使用时进行调用即可(JsonUtil类)-------- 单例模型
单例模型 ---- 简单概念:因为每次使用的方法和组件都是同样的,如果调用多次就显得代码较为冗余,比较麻烦。这里先把他封装成一个类,多次调用的使用不使用new方法 而定义一个 setatic 的 getInstance方法 在该方法里面判定其是否以及被定义,如果没被定义则会新建该对象类反之不会新建
这种方法极大的减少了代码量和代码的冗余程度,也优化了代码的可阅读性。
例如:
public class JsonUtil {
private static JsonUtil instance;
public JsonUtil() {
}
//创建对象,定义instance方法(单例模型判断)
public static JsonUtil getInstance(){
if (instance == null){
instance = new JsonUtil();
}
return instance;
}
//设置解析方法
public WeatherBean getWeatherFromJson(Context context , String json){
WeatherBean weather = new WeatherBean();
Gson gson = new Gson();
Type type = new TypeToken<WeatherBean>(){}.getType();
weather = gson.fromJson(json,type);
return weather;
}
}