浅析Google的Gson解析

本文深入探讨了Google官方推出的Gson库在处理JSON数据时的强大功能,包括如何将Java对象转换为JSON字符串及反序列化JSON字符串为Java对象。详细介绍了Gson的使用方法和技巧,通过具体实例展示了如何处理复杂结构的JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    互联网巨头推出了json的强大解析工具Gson用这个工具将对象映射成json串,以及将json串映射成javabean非常的方便。大大的降低了开发的难度。有人喜欢拿它和阿里的fastjson相比较,有时间我也研究一下fastjson在做评论。废话不说下面就一个菜鸟的观点来浅析一下json。

   首先需下载Google官方的Gson jar包,这个很容易找到的。然后使用非常的简单。gson需要与javabean紧密的配合的。所以你应首先定义你的bean。如下:

    import java.util.List;


public class JsonClass {
private String a;
private List<B> b;
private C c;


public JsonClass() {
super();


}


public JsonClass(String a, List<B> b, C c) {
super();
this.a = a;
this.b = b;
this.c = c;
}


public String getA() {
return a;
}


public void setA(String a) {
this.a = a;
}


public List<B> getB() {
return b;
}


public void setB(List<B> b) {
this.b = b;
}


public C getC() {
return c;
}


public void setC(C c) {
this.c = c;
}


public static class B {
private String b1;
private String b2;


public B() {
super();


}


public B(String b1, String b2) {
super();
this.b1 = b1;
this.b2 = b2;
}


public String getB1() {
return b1;
}


public void setB1(String b1) {
this.b1 = b1;
}


public String getB2() {
return b2;
}


public void setB2(String b2) {
this.b2 = b2;
}


}


public static class C {
private String c1;
private String c2;


public C() {
super();


}


public C(String c1, String c2) {
super();
this.c1 = c1;
this.c2 = c2;
}


public String getC1() {
return c1;
}


public void setC1(String c1) {
this.c1 = c1;
}


public String getC2() {
return c2;
}


public void setC2(String c2) {
this.c2 = c2;
}


}
}

   然后我们通过Gson提供的方法,new Gson().toJson(JsonClass)这个方法就可以转化成的json格式为:

    {"a":"100","b":[{"b1":"b_value1","b2":"b_value2"}, {"b1":"b_value1","b2":"b_value2"}],"c": {"c1":"c_value1","c2":"c_value2"}}  是不是很简单呀,当我们需要什么样的json格式中只需定义好自己的bean就好了,其中key就是我们的成员变量,value就是相应的值。

   Gson还用一个重要的方法就是将json串映射为对象。这个在从服务器中获得json串后解析非常有用的。首先我们应先观察我们的json的格式。然后编写相应的bean就可以了。我认为一个简单的方法,这个对复杂的json解析很有用的。就是我们一见到{}中间的内容,就应该想到这是一个对象的,见到[]中间的我们应首先考虑的是List<T>其中T就是我们要编写的类。这样就很容易的编写类,且是屡试不爽的。哈哈!不多说上例子:

   如json串为:{
    "error": 0,
    "status": "success",
    "date": "2014-05-10",
    "results": [
        {
            "currentCity": "南京",
            "weather_data": [
                {
                    "date": "周六(今天, 实时:19℃)",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/dayu.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/dayu.png",
                    "weather": "大雨",
                    "wind": "东南风5-6级",
                    "temperature": "18℃"
                },
                {
                    "date": "周日",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/zhenyu.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/duoyun.png",
                    "weather": "阵雨转多云",
                    "wind": "西北风4-5级",
                    "temperature": "21 ~ 14℃"
                }
            ]
        }
    ]
}

   用我们刚才的方法很容易写出bean为:

   public class ComplexClass {
private int error;
private String status;
private String date;
private List<Result> results;


public ComplexClass() {
super();
}


public ComplexClass(int error, String status, String date,
List<Result> results) {
super();
this.error = error;
this.status = status;
this.date = date;
this.results = results;
}


public int getError() {
return error;
}


public void setError(int error) {
this.error = error;
}


public String getStatus() {
return status;
}


public void setStatus(String status) {
this.status = status;
}


public String getDate() {
return date;
}


public void setDate(String date) {
this.date = date;
}


public List<Result> getResults() {
return results;
}


public void setResults(List<Result> results) {
this.results = results;
}


public class Result {
private String currentCity;
private List<Weather> weather_data;


public Result() {
super();
// TODO Auto-generated constructor stub
}


public Result(String currentCity, List<Weather> weather_data) {
super();
this.currentCity = currentCity;
this.weather_data = weather_data;
}


public String getCurrentCity() {
return currentCity;
}


public void setCurrentCity(String currentCity) {
this.currentCity = currentCity;
}


public List<Weather> getWeather_data() {
return weather_data;
}


public void setWeather_data(List<Weather> weather_data) {
this.weather_data = weather_data;
}


}


public class Weather {


private String date;
private String dayPictureUrl;
private String weather;
private String wind;
private String temperature;


public Weather() {
super();
// TODO Auto-generated constructor stub
}


public Weather(String date, String dayPictureUrl, String weather,
String wind, String temperature) {
super();
this.date = date;
this.dayPictureUrl = dayPictureUrl;
this.weather = weather;
this.wind = wind;
this.temperature = temperature;
}


public String getDate() {
return date;
}


public void setDate(String date) {
this.date = date;
}


public String getDayPictureUrl() {
return dayPictureUrl;
}


public void setDayPictureUrl(String dayPictureUrl) {
this.dayPictureUrl = dayPictureUrl;
}


public String getWeather() {
return weather;
}


public void setWeather(String weather) {
this.weather = weather;
}


public String getWind() {
return wind;
}


public void setWind(String wind) {
this.wind = wind;
}


public String getTemperature() {
return temperature;
}


public void setTemperature(String temperature) {
this.temperature = temperature;
}


}
}

    再来个复杂的json串:

   {
    "payCnt": 3,
    "payInfo": [
        {
            "payInfoMain": {
                "ordNum": "201206010000001",
                "transSite": "",
                "transBankNo": "TEPB",
                "bankAcctNo": "010",
                "totAmt": "30",
                "billChkCode": "3316",
                "tollDeptNo": "NDZSXH000",
                "busType": "FJFS",
                "other1": "remark1",
                "other2": "remark2",
                "bankName": "模拟银行2",
                "transSeq": "20120601000000001",
                "tranType": "",
                "siteCode": "200001",
                "eBillVerNo": "000001",
                "tollDeptName": "宁德市会计专业技术考试领导小组",
                "itemCnt": 1,
                "tranUser": "",
                "payer": "宁德",
                "eBillNo": "201206010000000136",
                "transBankName": "模拟银行2",
                "transAcctNo": "010",
                "siteName": "国家司法考试网",
                "ordDate": "20120601"
            },
            "eBillNo": "201206010000000136",
            "payInfoItem": [
                {
                    "amt": "30",
                    "chrgStd": "1",
                    "cnt": "1",
                    "chrgName": "初级网络工程师报名费",
                    "msrUint": "元/科",
                    "chrgCode": "KA460001"
                }
            ]
        },
        {
            "payInfoMain": {
                "ordNum": "201206010000001",
                "transSite": "",
                "transBankNo": "TEPB",
                "bankAcctNo": "010",
                "totAmt": "10",
                "billChkCode": "2258",
                "tollDeptNo": "777516727",
                "busType": "FJFS",
                "other1": "remark1",
                "other2": "remark2",
                "bankName": "模拟银行2",
                "transSeq": "20120601000000001",
                "tranType": "",
                "siteCode": "200001",
                "eBillVerNo": "000001",
                "tollDeptName": "福建省省会计管理处",
                "itemCnt": 1,
                "tranUser": "",
                "payer": "缴款人",
                "eBillNo": "201206010000000134",
                "transBankName": "模拟银行2",
                "transAcctNo": "010",
                "siteName": "国家司法考试网",
                "ordDate": "20120601"
            },
            "eBillNo": "201206010000000134",
            "payInfoItem": [
                {
                    "amt": "10",
                    "chrgStd": "1",
                    "cnt": "1",
                    "chrgName": "交通罚没",
                    "msrUint": "元/科",
                    "chrgCode": "460"
                }
            ]
        },
        {
            "payInfoMain": {
                "ordNum": "201206010000001",
                "transSite": "",
                "transBankNo": "TEPB",
                "bankAcctNo": "010",
                "totAmt": "20",
                "billChkCode": "0198",
                "tollDeptNo": "003604520",
                "busType": "FJFS",
                "other1": "remark1",
                "other2": "remark2",
                "bankName": "模拟银行2",
                "transSeq": "20120601000000001",
                "tranType": "",
                "siteCode": "200001",
                "eBillVerNo": "000001",
                "tollDeptName": "福州市财政局会计管理处",
                "itemCnt": 1,
                "tranUser": "",
                "payer": "福州",
                "eBillNo": "201206010000000135",
                "transBankName": "模拟银行2",
                "transAcctNo": "010",
                "siteName": "国家司法考试网",
                "ordDate": "20120601"
            },
            "eBillNo": "201206010000000135",
            "payInfoItem": [
                {
                    "amt": "20",
                    "chrgStd": "1",
                    "cnt": "1",
                    "chrgName": "会计从业资格证考务费",
                    "msrUint": "元/科",
                    "chrgCode": "BA460"
                }
            ]
        }
    ]
}

  则同样用我们的方法写的bean为:

   public class BianTai {
private int payCnt;
private List<PayInfo> payInfo;


public BianTai() {
super();


}


public BianTai(int payCnt, List<PayInfo> payInfo) {
super();
this.payCnt = payCnt;
this.payInfo = payInfo;
}


public int getPayCnt() {
return payCnt;
}


public void setPayCnt(int payCnt) {
this.payCnt = payCnt;
}


public List<PayInfo> getPayInfo() {
return payInfo;
}


public void setPayInfo(List<PayInfo> payInfo) {
this.payInfo = payInfo;
}


public class PayInfo {
private PayInfoMain payInfoMain;
private String eBillNo;
private List<PayInfoItem> payInfoItem;


public PayInfo(PayInfoMain payInfoMain, String eBillNo,
List<PayInfoItem> payInfoItem) {
super();
this.payInfoMain = payInfoMain;
this.eBillNo = eBillNo;
this.payInfoItem = payInfoItem;
}


public PayInfoMain getPayInfoMain() {
return payInfoMain;
}


public void setPayInfoMain(PayInfoMain payInfoMain) {
this.payInfoMain = payInfoMain;
}


public String geteBillNo() {
return eBillNo;
}


public void seteBillNo(String eBillNo) {
this.eBillNo = eBillNo;
}


public List<PayInfoItem> getPayInfoItem() {
return payInfoItem;
}


public void setPayInfoItem(List<PayInfoItem> payInfoItem) {
this.payInfoItem = payInfoItem;
}


public PayInfo() {
super();
// TODO Auto-generated constructor stub
}


public class PayInfoMain {


private String ordNum;
private String transSite;
private String transBankNo;
private String bankAcctNo;
private String totAmt;
private String billChkCode;
private String tollDeptNo;
private String busType;
private String other1;
private String other2;
private String bankName;
private String transSeq;
private String tranType;
private String siteCode;
private String eBillVerNo;
private String tollDeptName;
private String itemCnt;
private String tranUser;
private String payer;
private String eBillNo;
private String transBankName;
private String transAcctNo;
private String siteName;
private String ordDate;


public PayInfoMain() {
super();
// TODO Auto-generated constructor stub
}


public PayInfoMain(String ordNum, String transSite,
String transBankNo, String bankAcctNo, String totAmt,
String billChkCode, String tollDeptNo, String busType,
String other1, String other2, String bankName,
String transSeq, String tranType, String siteCode,
String eBillVerNo, String tollDeptName, String itemCnt,
String tranUser, String payer, String eBillNo,
String transBankName, String transAcctNo, String siteName,
String ordDate) {
super();
this.ordNum = ordNum;
this.transSite = transSite;
this.transBankNo = transBankNo;
this.bankAcctNo = bankAcctNo;
this.totAmt = totAmt;
this.billChkCode = billChkCode;
this.tollDeptNo = tollDeptNo;
this.busType = busType;
this.other1 = other1;
this.other2 = other2;
this.bankName = bankName;
this.transSeq = transSeq;
this.tranType = tranType;
this.siteCode = siteCode;
this.eBillVerNo = eBillVerNo;
this.tollDeptName = tollDeptName;
this.itemCnt = itemCnt;
this.tranUser = tranUser;
this.payer = payer;
this.eBillNo = eBillNo;
this.transBankName = transBankName;
this.transAcctNo = transAcctNo;
this.siteName = siteName;
this.ordDate = ordDate;
}


public String getOrdNum() {
return ordNum;
}


public void setOrdNum(String ordNum) {
this.ordNum = ordNum;
}


public String getTransSite() {
return transSite;
}


public void setTransSite(String transSite) {
this.transSite = transSite;
}


public String getTransBankNo() {
return transBankNo;
}


public void setTransBankNo(String transBankNo) {
this.transBankNo = transBankNo;
}


public String getBankAcctNo() {
return bankAcctNo;
}


public void setBankAcctNo(String bankAcctNo) {
this.bankAcctNo = bankAcctNo;
}


public String getTotAmt() {
return totAmt;
}


public void setTotAmt(String totAmt) {
this.totAmt = totAmt;
}


public String getBillChkCode() {
return billChkCode;
}


public void setBillChkCode(String billChkCode) {
this.billChkCode = billChkCode;
}


public String getTollDeptNo() {
return tollDeptNo;
}


public void setTollDeptNo(String tollDeptNo) {
this.tollDeptNo = tollDeptNo;
}


public String getBusType() {
return busType;
}


public void setBusType(String busType) {
this.busType = busType;
}


public String getOther1() {
return other1;
}


public void setOther1(String other1) {
this.other1 = other1;
}


public String getOther2() {
return other2;
}


public void setOther2(String other2) {
this.other2 = other2;
}


public String getBankName() {
return bankName;
}


public void setBankName(String bankName) {
this.bankName = bankName;
}


public String getTransSeq() {
return transSeq;
}


public void setTransSeq(String transSeq) {
this.transSeq = transSeq;
}


public String getTranType() {
return tranType;
}


public void setTranType(String tranType) {
this.tranType = tranType;
}


public String getSiteCode() {
return siteCode;
}


public void setSiteCode(String siteCode) {
this.siteCode = siteCode;
}


public String geteBillVerNo() {
return eBillVerNo;
}


public void seteBillVerNo(String eBillVerNo) {
this.eBillVerNo = eBillVerNo;
}


public String getTollDeptName() {
return tollDeptName;
}


public void setTollDeptName(String tollDeptName) {
this.tollDeptName = tollDeptName;
}


public String getItemCnt() {
return itemCnt;
}


public void setItemCnt(String itemCnt) {
this.itemCnt = itemCnt;
}


public String getTranUser() {
return tranUser;
}


public void setTranUser(String tranUser) {
this.tranUser = tranUser;
}


public String getPayer() {
return payer;
}


public void setPayer(String payer) {
this.payer = payer;
}


public String geteBillNo() {
return eBillNo;
}


public void seteBillNo(String eBillNo) {
this.eBillNo = eBillNo;
}


public String getTransBankName() {
return transBankName;
}


public void setTransBankName(String transBankName) {
this.transBankName = transBankName;
}


public String getTransAcctNo() {
return transAcctNo;
}


public void setTransAcctNo(String transAcctNo) {
this.transAcctNo = transAcctNo;
}


public String getSiteName() {
return siteName;
}


public void setSiteName(String siteName) {
this.siteName = siteName;
}


public String getOrdDate() {
return ordDate;
}


public void setOrdDate(String ordDate) {
this.ordDate = ordDate;
}


}


public class PayInfoItem {
private String amt;
private String chrgStd;
private String cnt;
private String chrgName;
private String msrUint;
private String chrgCode;


public PayInfoItem() {
super();


}


public PayInfoItem(String amt, String chrgStd, String cnt,
String chrgName, String msrUint, String chrgCode) {
super();
this.amt = amt;
this.chrgStd = chrgStd;
this.cnt = cnt;
this.chrgName = chrgName;
this.msrUint = msrUint;
this.chrgCode = chrgCode;
}


public String getAmt() {
return amt;
}


public void setAmt(String amt) {
this.amt = amt;
}


public String getChrgStd() {
return chrgStd;
}


public void setChrgStd(String chrgStd) {
this.chrgStd = chrgStd;
}


public String getCnt() {
return cnt;
}


public void setCnt(String cnt) {
this.cnt = cnt;
}


public String getChrgName() {
return chrgName;
}


public void setChrgName(String chrgName) {
this.chrgName = chrgName;
}


public String getMsrUint() {
return msrUint;
}


public void setMsrUint(String msrUint) {
this.msrUint = msrUint;
}


public String getChrgCode() {
return chrgCode;
}


public void setChrgCode(String chrgCode) {
this.chrgCode = chrgCode;
}


}
}


}  

   大家自己理解以下很简单的。


   




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值