ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Android Gson数据解析

2021-07-03 14:01:53  阅读:189  来源: 互联网

标签:JsonUtil gson json new Android 解析 Gson


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;
    }
}

标签:JsonUtil,gson,json,new,Android,解析,Gson
来源: https://blog.csdn.net/m0_51517626/article/details/118439045

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有