Android中的应用——谷歌官方Json分析工具Gson使用

Android中的应用——谷歌官方Json分析工具Gson使用

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

一个、Gson基本介绍

Gson
(又称
Google
 Gson)是
Google
公司公布的一个开放源码的
Java
库。主要用途为
串行化
Java
对象为
JSON
字符串,或反
串行化
JSON
字符串成
Java
对象。

也就是Java对象与json字符串间的互相转换。解析。


二、用法

Gson的应用主要为toJson与fromJson两个转换函数,而在使用这样的对象转换之前需先创建好对象的类型以及其成员才干成功的将JSON字符串成功转换成相相应的对象。即先创建好相应的javabean。javabean中的字段与要转换的json之间要一一相应。否则会出现解析失败的情况。


将json解析成javabean对象:

javabean:

public class Person {
	private String name;
	private int age;
	private String gender;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public String getGender() {
		return gender;
	}
	public void setGender(String gender) {
		this.gender = gender;<pre name="code" class="java">

}}


json字符串:

{ "name":"zhangsan","age":20,"gender":"男"}

将此json字符串解析成java对象:

Person person = new Gson().fromJson(json, Person.class);
这样就能够将json字符串解析成javabean对象。

插入一点,json字符串和JSONObject对象之间的转换。由于有些地方可能须要json字符串,有些地方须要的是jsonobject对象

json字符串转换成
JSONObject对象:
JSONObject jsonobject = new JSONObject(json);

JSONObject对象转换为json字符串

String jsonString = json.toString();

上面的情况仅仅是一种最简单的样例。假如json字符串略微复杂一点,涉及到对象的嵌套
看以下的样例:
{
    "status_code": "0",
    "result": {
        "card_edate": "1451491200",
        "edate_remark": "2015年12月31日之前免费获取",
        "card_remark": "1、会员尊享多种超值特权\r\n2、会员专享预存500送50",
        "merchant_id": "2",
        "card_img": "http://www.yuelife.com/srdz_pic/baralogo.jpg",
        "card_id": "2"
    },
    "status_desc": "ok"
}

这是服务端返回的一个json串,这里面就涉及到了对象的嵌套,json串里面的result參数也是一个对象。

这样的情况的处理方式例如以下:
JSONObject jsonObject = json.optJSONObject("result");

这样就又得到了一个JSONObject对象  然后又能够通过这个JSONObject对象来得到javabean对象或者直接进行解析。

假设要得到javabean对象。直接用fromjson就可以,假设直接想解析result里面的某个參数,那么就进行例如以下操作:
String cardNumber = jsonobject.optString("card_id");

这样就能够得到cardNumber的数值。


上面的情况是对象的嵌套。另一种情况是数组的嵌套,看以下的样例:
{
    "status_code": "0",
    "result": [
        {
            "Rows": [
                {
                    "branch_longitude": "113.9760310000",
                    "branch_userid": "273",
                    "branch_addr": "深圳南山区深南大道9028号益田假日广场内L3层",
                    "branch_status": "1",
                    "is_default": "1",
                    "branch_phone": "13316467909,18875900656",
                    "branch_creattime": "0",
                    "city": "深圳市",
                    "branch_park": "门前有停车位",
                    "province": "广东",
                    "branch_guidelines": "11路公交车",
                    "branch_updatetime": "0",
                    "merchant_id": "2",
                    "branch_precision": "",
                    "branch_latitude": "22.5375870000",
                    "branch_id": "25",
                    "branch_name": "四海一家番禺店"
                }
            ],
            "shop_city": "深圳市"
        },
        {
            "Rows": [
                {
                    "branch_longitude": "113.3802380000",
                    "branch_userid": "273",
                    "branch_addr": "广东省广州市番禺区南村镇番禺大道(原迎宾路)万博中心A2栋1-2楼",
                    "branch_status": "1",
                    "is_default": "0",
                    "branch_phone": "13711112346,02038823585",
                    "branch_creattime": "0",
                    "city": "广州市",
                    "branch_park": "门前有停车位",
                    "province": "广东",
                    "branch_guidelines": "120路公交车",
                    "branch_updatetime": "0",
                    "merchant_id": "2",
                    "branch_precision": "",
                    "branch_latitude": "23.0032640000",
                    "branch_id": "26",
                    "branch_name": "四海一家番禺区南村镇番禺店"
                }
            ],
            "shop_city": "广州市"
        }
    ],
    "status_desc": "ok"
}

上面是服务端返回的json对象,这个json略微有点复杂。涉及到了对象的嵌套和数组的嵌套。

result字段的值是一个数组,数组里面嵌套有对象和数组。
碰到这样的情况,解决的方法事实上非常easy,那就是将[]里面的内容当作集合来处理。将{}里面的内容当作对象来处理

 所以这个json的解析,就先看result的[]内的内容。是由两个{}也就是对象组成的,因此,将以下这一段定义为一个javabean。然后解析成对象

{
            "Rows": [
                {
                    "branch_longitude": "113.9760310000",
                    "branch_userid": "273",
                    "branch_addr": "深圳南山区深南大道9028号益田假日广场内L3层",
                    "branch_status": "1",
                    "is_default": "1",
                    "branch_phone": "13316467909,18875900656",
                    "branch_creattime": "0",
                    "city": "深圳市",
                    "branch_park": "门前有停车位",
                    "province": "广东",
                    "branch_guidelines": "11路公交车",
                    "branch_updatetime": "0",
                    "merchant_id": "2",
                    "branch_precision": "",
                    "branch_latitude": "22.5375870000",
                    "branch_id": "25",
                    "branch_name": "四海一家番禺店"
                }
            ],
            "shop_city": "深圳市"
        }

定义的javabean例如以下:

public class OrderSeatRows {
	private List<OrderStoreBean> Rows;
	private String shop_city;
	
	public List<OrderStoreBean> getRows() {
		return Rows;
	}
	public void setRows(List<OrderStoreBean> rows) {
		Rows = rows;
	}
	public String getShop_city() {
		return shop_city;
	}
	public void setShop_city(String shop_city) {
		this.shop_city = shop_city;
	}
}

由于该javabean中的rows字段也是由[]组成,也就是rows也是一个数组,因此。将rows当成一个集合,里面的{}内容。也就是以下的内容也定义为一个javabean,解析成对象

public class OrderStoreBean {
	private String branch_addr;
	private String branch_userid;
	private String branch_id;
	private String branch_name;
	private String province;
	private String city;
	private String branch_status;
	private String branch_latitude;
	private String branch_longitude;
	private String is_default;
	private String branch_phone;
	private String branch_creattime;
	private String branch_park;
	private String branch_guidelines;
	private String branch_updatetime;
	private String merchant_id;
	private String branch_precision;
	public String getBranch_addr() {
		return branch_addr;
	}
	public void setBranch_addr(String branch_addr) {
		this.branch_addr = branch_addr;
	}
	public String getBranch_userid() {
		return branch_userid;
	}
	public void setBranch_userid(String branch_userid) {
		this.branch_userid = branch_userid;
	}
	public String getBranch_id() {
		return branch_id;
	}
	public void setBranch_id(String branch_id) {
		this.branch_id = branch_id;
	}
	public String getBranch_name() {
		return branch_name;
	}
	public void setBranch_name(String branch_name) {
		this.branch_name = branch_name;
	}
	public String getProvince() {
		return province;
	}
	public void setProvince(String province) {
		this.province = province;
	}
	public String getCity() {
		return city;
	}
	public void setCity(String city) {
		this.city = city;
	}
	public String getBranch_status() {
		return branch_status;
	}
	public void setBranch_status(String branch_status) {
		this.branch_status = branch_status;
	}
	public String getBranch_latitude() {
		return branch_latitude;
	}
	public void setBranch_latitude(String branch_latitude) {
		this.branch_latitude = branch_latitude;
	}
	public String getBranch_longitude() {
		return branch_longitude;
	}
	public void setBranch_longitude(String branch_longitude) {
		this.branch_longitude = branch_longitude;
	}
	public String getIs_default() {
		return is_default;
	}
	public void setIs_default(String is_default) {
		this.is_default = is_default;
	}
	public String getBranch_phone() {
		return branch_phone;
	}
	public void setBranch_phone(String branch_phone) {
		this.branch_phone = branch_phone;
	}
	public String getBranch_creattime() {
		return branch_creattime;
	}
	public void setBranch_creattime(String branch_creattime) {
		this.branch_creattime = branch_creattime;
	}
	public String getBranch_park() {
		return branch_park;
	}
	public void setBranch_park(String branch_park) {
		this.branch_park = branch_park;
	}
	public String getBranch_guidelines() {
		return branch_guidelines;
	}
	public void setBranch_guidelines(String branch_guidelines) {
		this.branch_guidelines = branch_guidelines;
	}
	public String getBranch_updatetime() {
		return branch_updatetime;
	}
	public void setBranch_updatetime(String branch_updatetime) {
		this.branch_updatetime = branch_updatetime;
	}
	public String getMerchant_id() {
		return merchant_id;
	}
	public void setMerchant_id(String merchant_id) {
		this.merchant_id = merchant_id;
	}
	public String getBranch_precision() {
		return branch_precision;
	}
	public void setBranch_precision(String branch_precision) {
		this.branch_precision = branch_precision;
	}
}

将上面的类都定义好后,就能够開始解析了

先解析[]的内容,即先解析数组
Gson解析数组的方法例如以下:optJSONArray9()方法     jo为服务端返回的JSONObject对象
JSONArray orderJSONArray = jo.optJSONArray("result");

经过上面的解析后,就得到了一个JSONArray对象,这个对象就能够依据实际情况,继续解析。

if (null != orderJSONArray&& orderJSONArray.length() > 0) {
	for (int i = 0; i < orderJSONArray.length(); i++) {
	JSONObject cityJsonObject = orderJSONArray.getJSONObject(i);
	OrderSeatRows orderRow = GsonUtils.toObject(cityJsonObject.toString(),OrderSeatRows.class);

便利JSONArray对象。利用getJSONObject()方法。就能够得到
JSONArray中全部的JSONObject对象,得到了JSONObject对象。就能够将json解析为之前定义好的对象了。


总结:
开发中一般用到的几种数据模型。都在上面介绍到了,事实上仅仅要把握一个原则,看到[]解析成数组。看到{}解析成对象。那么再复杂的json数据都能够非常轻松的解析出我们想要的数据。为后面的开发作好数据准备。




版权声明:本文博客原创文章。博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/117363.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 列车调度问题[通俗易懂]

    列车调度问题[通俗易懂]题目:高铁货运站的调配问题我们国家大力发展道路交通基础设施,最近这些年修建了大量的高铁线路,以促进国内的物资运输和调配,ZZ是一个超级货运站,是连接亚欧货运的枢纽站,现在ZZ货运站列车调度铁轨的结构如下图所示。两端分别是一条入口(Entrance)轨道和一条出口(Exit)轨道,它们之间有N条平行的轨道。每趟列车从入口可以选择任意…

  • 第三章 —- 了解各种 Linux 文本编辑器

    第三章 —- 了解各种 Linux 文本编辑器了解各种Linux文本编辑器了解Linux中不同类型的文本编辑器解释Vi文本编辑器常用命令了解Linux中不同类型的文本编辑器解释Vi文本编辑器viniit.txt:如果niit.txt文件存在,就进入命令模式:如果不存在,就先创建,再进入命令模式命令模式:按键ESC,由输入模式进入命令模式特点:在文件的最下方,什么都不显示或者显示文件基本信息输入模式:按键aAiLoOrR,由命令模式进入输入模式特点:在文件的最下方出现–INSERT–

  • 指针函数与函数指针

    指针函数与函数指针1.指针函数先看下面的函数声明,注意,此函数有返回值,返回值为int*,即返回值是指针类型的。int*f(inta,intb);上面的函数声明又可以写成如下形式:int*f(inta,intb);让指针标志*与int紧贴在一起,而与函数名f间隔开,这样看起来就明了些了,f是函数名,返回值类型是一个int类型的指针。下面看指针函数的实现:in

  • 计算机组成原理知识点总结(第2篇 第3、4章)[通俗易懂]

    计算机组成原理知识点总结(第2篇 第3、4章)[通俗易懂]基于计算机组成原理(第2版)唐朔飞编著第2篇计算机系统的硬件结构 第3章系统总线总线是连接多个部件(模块)的信息传输线,是各部件共享的传输介质。在某一时刻只允许有一个部件向总线发送信息,但多个部件可以同时从总线上接收相同的信息。总线通信分为异步和同步两大类。总线的定义:为多个功能组件服务的一组公用信息线。按功能分类:地址总线、数据总线、控制总线。按连接部件不同分类:片内总线、系…

  • 关于android studio 中安装intel haxm问题的解决

    关于android studio 中安装intel haxm问题的解决关于androidstudio安装intelhaxm问题的解决遇到的问题解决问题总结遇到的问题安装androidstudio过程中intelhaxm失败,导致后续笔记本运行模拟器过程中漫长等待让我痛不欲生。于是着手解决intelhaxm安装失败问题。我的笔记本型号是thinkpadw510,处理器i7Q720,操作系统windows7sp1。解决问题1、进入andro…

  • sql语句批量清空表数据

    sql语句批量清空表数据业务场景:开发过程中由于历史数据造成正常的功能出错,希望在某次测试之前,执行sql批量清空所有相关的业务数据,保留表结构。假设有表test1、test2,sql语句放在sql文件中,直接执行即可。truncatetabletest1;truncatetabletest2;…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号