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数据都能够非常轻松的解析出我们想要的数据。为后面的开发作好数据准备。




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

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 五层网络协议,各层功能,各层协议的区别_最新软件开发国家标准

    五层网络协议,各层功能,各层协议的区别_最新软件开发国家标准一、OSI七层模型OSI七层协议模型主要是:应用层(Application)、表示层(Presentation)、会话层(Session)、传输层(Transport)、网络层(Network)、数据链路层(DataLink)、物理层(Physical)。三、五层体系结构五层体系结构包括:应用层、运输层、网络层、数据链路层和物理层。 五层协议只是OSI和TCP/IP的综合,实际应用还是TCP/I…

    2025年5月26日
    5
  • 证明彼得森图不是平面图

    证明彼得森图不是平面图使用反证法设彼得森图是平面图,那么按照欧拉公式R=E-V+2(R为面,E为边,V为结点)这里E=15,V=10但是彼得森图每个面至少有5条边,由推论可得3m<=5*(n-2)即15<=5/3*8矛盾,于是彼得森图不是平面图…

    2022年5月23日
    56
  • 用App Designer 制作2048小游戏

    用App Designer 制作2048小游戏用 AppDesigner 制作 2048 小游戏用 AppDesigner 制作的 2048 MATLAB 版本是 2020b 记录下创作思路 以免日后忘记 APP 界面设计 APP 界面如下 为了好玩 还加入了游戏进行时播放音乐的功能 下面是游戏结束界面 除了按钮和开关部分 其余都可用标签控件制作 游戏结束界面在制作时将其 Visible 属性设为 Off 确保在主界面上层 当判定游戏结束时再将 Visible 属性修改为 On 即可 app gameOverLabe Visible

    2025年10月29日
    3
  • cv2.fitline_pr自动抽帧

    cv2.fitline_pr自动抽帧cv::fitLine用法定义代码示例y=x+1直线y=-x+1直线定义在opencv官方文档定义如下:voidcv::fitLine(InputArraypoints,OutputArrayline,intdistType,doubleparam,doublereps,doubleaeps)#include<opencv2/imgproc.hpp>Fitsalinetoa2Dor3Dpointset.Paramet

    2025年6月5日
    3
  • Python 学习笔记 变量 xxx XXX「建议收藏」

    Python 学习笔记 变量 xxx XXX「建议收藏」Python学习笔记变量xxxXXXname=”adalovelace”print(name.title())print(name.upper())print(name.lower())first_name=”ada”last_name=”lovelace”full_name=first_name+””+last_nameprint(full_name)print(“Hello,”+…

    2022年8月22日
    11
  • 网易云音乐如何将多个账号的音乐合并到一个账号

    网易云音乐如何将多个账号的音乐合并到一个账号

    2021年5月17日
    716

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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