文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

如何使用GSON解析JSON数据

2024-04-02 19:55

关注

GSON是谷歌提供的一个开源库,可以用来解析JSON数据

添加依赖

不过GSON并没有被添加到Android官方的API中,所以如果要使用这个开源库,我们就要先添加依赖,编辑app/build.gradle文件,

在dependencies闭包中添加如下内容:

implementation 'com.google.code.gson:gson:2.7'

JSON数据介绍

JSON数据分为两种,对象和数组,用{ }括起来的是对象,用[ ]括起来的是数组。

对象:

	{
            "user": "user1",
            "pwd": "123456"
	}

此处是一个JSON对象,里面有两个字段,分别是user和pwd。

数组:

[
	{"user": "user1",
	  "pwd": "123456"},
	  
	  {"user": "user2",
	  "pwd": "123456"}
]

此处是一个JSON数组,数组里面包含两个对象,每个对象包含两个字段。

字段和数组

{
        "user": "user1",
        "pwd": "123456",
            
        "jsonArray": [
			 {"user": "user1",
	 	      "pwd": "123456"},
	  
	 	     {"user": "user2",
	 		 "pwd": "123456"}
						],
						
			"result": "成功"			
}

此处是一个JSON对象,里面包含了字段和数组。

在实际情况中,一般都是一个JSON对象里面有数组和其它字段,或者是很多的嵌套,我们只需要一层一层的去解析就可以了。

GsonFormat

Gson是采用对象映射的方式,所以我们要为JSON数据创建一个Java对象来与之对应。

我们可以使用GsonFormat插件,迅速的将JSON数据转换成Java对象,使用方法如下:

1、安装好GsonFormat插件

2、新建一个类,在类里的空白处按Alt+S键,并将要转换的JSON数据复制进去,界面如下所示:

注意:自动生成的时候,内部类可能会是静态的,手动把内部类的static去掉。

@SerializedName注解

由于JSON中的一些字段可能不太适合直接作为Java字段来命名,因此这里使用了@SerializedName注解的方式来让JSON字段和Java字段之间建立映射关系。

例:

此处的Test类为JSON数据的一个映射类,而USER和PWD为JSON数据中的两个字段,很明显,这两个字段的名字不适合做变量名,所以使用@SerializedName注解的方式来让USER和user建立映射关系,PWD和password建立映射关系。

Gson的使用

解析JSON对象

Gson gson = new Gson();
User user = gson.fromJson(jsonData, User.class);

此处的User类是JSON数据的一个映射类,jsonData是JSON数据,注意:此处是一个字符串,所有的JSON数据都放在这个字符串中,一般为服务器返回的数据。

解析JSON数组

 Gson gson = new Gson();
 List<User> userList = gson.fromJson(jsonData, new TypeToken<User>(){}.getType());

因为是解析JSON数组,所以我们要用一个List来存放这个数组,List中的每一个对象就是JSON数组中的每一个元素。

具体实例

要解析的JSON数据:

{
        "user": "user1",
        "pwd": "123456",
            
        "jsonArray": [
			 {"user": "user1",
	 	      "pwd": "123456"},
	  
	 	     {"user": "user2",
	 		 "pwd": "123456"}
						],
						
			"result": "成功"			
}

映射的Java类:

public class Data {
    
    private String user;
    private String pwd;
    private String result;
    private List<JsonArrayBean> jsonArray;
    public String getUser() {
        return user;
    }
    public void setUser(String user) {
        this.user = user;
    }
    public String getPwd() {
        return pwd;
    }
    public void setPwd(String pwd) {
        this.pwd = pwd;
    }
    public String getResult() {
        return result;
    }
    public void setResult(String result) {
        this.result = result;
    }
    public List<JsonArrayBean> getJsonArray() {
        return jsonArray;
    }
    public void setJsonArray(List<JsonArrayBean> jsonArray) {
        this.jsonArray = jsonArray;
    }
    public class JsonArrayBean {
        
        private String user;
        private String pwd;
        public String getUser() {
            return user;
        }
        public void setUser(String user) {
            this.user = user;
        }
        public String getPwd() {
            return pwd;
        }
        public void setPwd(String pwd) {
            this.pwd = pwd;
        }
    }
}

解析的方法:

private void parseJSONData(String jsonData) {
        Gson gson = new Gson();
        Data data = gson.fromJson(jsonData, Data.class);
        // data就是整个JSON数据映射的一个对象
        String result = data.getResult(); // 取result字段的值
        String pwd = data.getPwd();   // 取pwd字段的值
        String user = data.getUser();  // 取user字段的值
        // 因为jsonArray字段对应的是一个JSON数组,所以要用一个List来对应
        List<Data.JsonArrayBean> list = data.getJsonArray();
        //取值
        for (int i = 0; i < list.size(); i++) {
            Data.JsonArrayBean jsonArrayBean = list.get(i);
            String user1 = jsonArrayBean.getUser();
            String pwd1 = jsonArrayBean.getPwd();
        }
    }

此处没有给出网络通信的代码,只给出了解析JSON数据的代码。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯