gson用法例子和Parcelable的用法例子

来源:互联网 发布:android 多个 数据库 编辑:程序博客网 时间:2024/06/06 11:22

最近碰到了解析json对象中的key是中文的json数据,学了下gson的用法。

gson包2.3.1版下载地址:http://download.csdn.net/detail/u012975705/9142787

源码

Info类

package com.practice.noyet.gsontest;import android.os.Parcel;import android.os.Parcelable;import com.google.gson.annotations.SerializedName;import java.util.List;/** * Created by noyet on 2015/9/27. */public class Info implements Parcelable {    @SerializedName("Data")    private List<CompanyInfo> list;    public Info() {    }    private Info(Parcel parcel) {        parcel.readTypedList(list, CompanyInfo.CREATOR);    }    @Override    public String toString() {        return "Info{" +                "list=" + list +                '}';    }    public List<CompanyInfo> getList() {        return list;    }    public void setList(List<CompanyInfo> list) {        this.list = list;    }    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel parcel, int i) {        parcel.writeTypedList(list);    }    public final static Creator<Info> CREATOR = new Creator<Info>() {        @Override        public Info createFromParcel(Parcel parcel) {            return new Info(parcel);        }        @Override        public Info[] newArray(int i) {            return new Info[i];        }    };}

CompanyInfo类

package com.practice.noyet.gsontest;import android.os.Parcel;import android.os.Parcelable;import com.google.gson.annotations.SerializedName;/** * Created by noyet on 2015/9/27. */public class CompanyInfo implements Parcelable {    //名字    private String CompanyName;    //ID    private int CompanyId;    //花费    private String CostTitle;    //年    private int Year;    //月    private int Month;    @SerializedName("CoseItem")    private CoseItemEntity coseItemEntity;    public CompanyInfo() {    }    private CompanyInfo(Parcel parcel) {        CompanyName = parcel.readString();        CompanyId = parcel.readInt();        CostTitle = parcel.readString();        Year = parcel.readInt();        Month = parcel.readInt();        coseItemEntity = parcel.readParcelable(CoseItemEntity.class.getClassLoader());    }    @Override    public String toString() {        return "CompanyInfo{" +                "CompanyName='" + CompanyName + '\'' +                ", CompanyId=" + CompanyId +                ", CostTitle='" + CostTitle + '\'' +                ", Year=" + Year +                ", Month=" + Month +                ", list=" + coseItemEntity +                '}';    }    public String getCompanyName() {        return CompanyName;    }    public void setCompanyName(String companyName) {        CompanyName = companyName;    }    public int getCompanyId() {        return CompanyId;    }    public void setCompanyId(int companyId) {        CompanyId = companyId;    }    public String getCostTitle() {        return CostTitle;    }    public void setCostTitle(String costTitle) {        CostTitle = costTitle;    }    public int getYear() {        return Year;    }    public void setYear(int year) {        Year = year;    }    public int getMonth() {        return Month;    }    public void setMonth(int month) {        Month = month;    }    public CoseItemEntity getCoseItemEntity() {        return coseItemEntity;    }    public void setCoseItemEntity(CoseItemEntity coseItemEntity) {        this.coseItemEntity = coseItemEntity;    }    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel parcel, int i) {        parcel.writeString(CompanyName);        parcel.writeInt(CompanyId);        parcel.writeString(CostTitle);        parcel.writeInt(Year);        parcel.writeInt(Month);        parcel.writeParcelable(coseItemEntity, i);    }    public final static Creator<CompanyInfo> CREATOR = new Creator<CompanyInfo>() {        @Override        public CompanyInfo createFromParcel(Parcel parcel) {            return new CompanyInfo(parcel);        }        @Override        public CompanyInfo[] newArray(int i) {            return new CompanyInfo[i];        }    };}

CoseItemEntity类

package com.practice.noyet.gsontest;import android.os.Parcel;import android.os.Parcelable;import com.google.gson.annotations.SerializedName;/** * Created by noyet on 2015/9/25. */public class CoseItemEntity implements Parcelable {    @SerializedName("工资总额")    private String totalSalary;    @SerializedName("当月工资总额")    private String monthSalary;    @SerializedName("管理费用及三费计提合计")    private String manageSalary;    @SerializedName("当月社会保险费用合计")    private String insureSalary;    @SerializedName("当月社会保险费用个人部分")    private String insurePersonalSalary;    @SerializedName("当月社会保险费用单位部分")    private String insureUnitSalary;    @SerializedName("当月其他商业保险费用")    private String insureBusinessSalary;    @SerializedName("公积金合计")    private String funds;    @SerializedName("公积金个人部分")    private String personalFunds;    @SerializedName("公积金单位部分")    private String unitFunds;    @SerializedName("其他")    private String others;    @SerializedName("代缴税金")    private String taxes;    @SerializedName("本月应付")    private String monthPay;    @SerializedName("开票金额")    private String billingAmount;    @Override    public String toString() {        return "CoseItemEntity{" +                "totalSalary='" + totalSalary + '\'' +                ", monthSalary='" + monthSalary + '\'' +                ", manageSalary='" + manageSalary + '\'' +                ", insureSalary='" + insureSalary + '\'' +                ", insurePersonalSalary='" + insurePersonalSalary + '\'' +                ", insureUnitSalary='" + insureUnitSalary + '\'' +                ", insureBusinessSalary='" + insureBusinessSalary + '\'' +                ", funds='" + funds + '\'' +                ", personalFunds='" + personalFunds + '\'' +                ", unitFunds='" + unitFunds + '\'' +                ", others='" + others + '\'' +                ", taxes='" + taxes + '\'' +                ", monthPay='" + monthPay + '\'' +                ", billingAmount='" + billingAmount + '\'' +                '}';    }    public String getTotalSalary() {        return totalSalary;    }    public void setTotalSalary(String totalSalary) {        this.totalSalary = totalSalary;    }    public String getMonthSalary() {        return monthSalary;    }    public void setMonthSalary(String monthSalary) {        this.monthSalary = monthSalary;    }    public String getManageSalary() {        return manageSalary;    }    public void setManageSalary(String manageSalary) {        this.manageSalary = manageSalary;    }    public String getInsureSalary() {        return insureSalary;    }    public void setInsureSalary(String insureSalary) {        this.insureSalary = insureSalary;    }    public String getInsurePersonalSalary() {        return insurePersonalSalary;    }    public void setInsurePersonalSalary(String insurePersonalSalary) {        this.insurePersonalSalary = insurePersonalSalary;    }    public String getInsureUnitSalary() {        return insureUnitSalary;    }    public void setInsureUnitSalary(String insureUnitSalary) {        this.insureUnitSalary = insureUnitSalary;    }    public String getInsureBusinessSalary() {        return insureBusinessSalary;    }    public void setInsureBusinessSalary(String insureBusinessSalary) {        this.insureBusinessSalary = insureBusinessSalary;    }    public String getFunds() {        return funds;    }    public void setFunds(String funds) {        this.funds = funds;    }    public String getPersonalFunds() {        return personalFunds;    }    public void setPersonalFunds(String personalFunds) {        this.personalFunds = personalFunds;    }    public String getUnitFunds() {        return unitFunds;    }    public void setUnitFunds(String unitFunds) {        this.unitFunds = unitFunds;    }    public String getOthers() {        return others;    }    public void setOthers(String others) {        this.others = others;    }    public String getTaxes() {        return taxes;    }    public void setTaxes(String taxes) {        this.taxes = taxes;    }    public String getMonthPay() {        return monthPay;    }    public void setMonthPay(String monthPay) {        this.monthPay = monthPay;    }    public String getBillingAmount() {        return billingAmount;    }    public void setBillingAmount(String billingAmount) {        this.billingAmount = billingAmount;    }    public static Creator<CoseItemEntity> getCREATOR() {        return CREATOR;    }    @Override    public int describeContents() {        return 0;    }    @Override    public void writeToParcel(Parcel parcel, int i) {        parcel.writeString(totalSalary);        parcel.writeString(monthSalary);        parcel.writeString(manageSalary);        parcel.writeString(insureSalary);        parcel.writeString(insurePersonalSalary);        parcel.writeString(insureUnitSalary);        parcel.writeString(insureBusinessSalary);        parcel.writeString(funds);        parcel.writeString(personalFunds);        parcel.writeString(unitFunds);        parcel.writeString(others);        parcel.writeString(taxes);        parcel.writeString(monthPay);        parcel.writeString(billingAmount);    }    public final static Creator<CoseItemEntity> CREATOR = new Creator<CoseItemEntity>() {        @Override        public CoseItemEntity createFromParcel(Parcel parcel) {            CoseItemEntity entity = new CoseItemEntity();            entity.totalSalary = parcel.readString();            entity.monthSalary = parcel.readString();            entity.manageSalary = parcel.readString();            entity.insureSalary = parcel.readString();            entity.insurePersonalSalary = parcel.readString();            entity.insureUnitSalary = parcel.readString();            entity.insureBusinessSalary = parcel.readString();            entity.funds = parcel.readString();            entity.personalFunds = parcel.readString();            entity.unitFunds = parcel.readString();            entity.others = parcel.readString();            entity.taxes = parcel.readString();            entity.monthPay = parcel.readString();            entity.billingAmount = parcel.readString();            return entity;        }        @Override        public CoseItemEntity[] newArray(int i) {            return new CoseItemEntity[i];        }    };}

单元测试 GsonTest.java

package com.practice.noyet.gsontest;import android.test.InstrumentationTestCase;/** * Created by noyet on 2015/9/27. */public class GsonTest extends InstrumentationTestCase {    public void testGson() {        GsonUtil.getGson();    }}

工具类 GsonUtil.java

package com.practice.noyet.gsontest;import android.util.Log;import com.google.gson.Gson;/** * Created by noyet on 2015/9/27. */public class GsonUtil {    private final static String jsonStr = "{\"Data\":[" +            "{\"CompanyName\":\"成都分公司\"," +            "\"CompanyId\":265,\"CostTitle\":\"7月工资\"," +            "\"Year\":2014,\"Month\":7,\"CoseItem\":{\"工资总额\":\"52382.57\"," +            "\"当月工资总额\":\"52382.58\",\"管理费用及三费计提合计\":\"4578.74\"," +            "\"当月社会保险费用合计\":\"15485.47\",\"当月社会保险费用个人部分\":\"4074.76\"," +            "\"当月社会保险费用单位部分\":\"11410.71\",\"当月其他商业保险费用\":\"0.00\"," +            "\"公积金合计\":\"5542.20\",\"公积金个人部分\":\"2771.10\",\"公积金单位部分\":\"2771.10\"," +            "\"其他\":\"0.00\",\"代缴税金\":\"3948.73\",\"本月应付\":\"0.00\",\"开票金额\":\"71143.12\"}}," +            "{\"CompanyName\":\"成都分公司)\",\"CompanyId\":265," +            "\"CostTitle\":\"8月工资\",\"Year\":2014,\"Month\":8," +            "\"CoseItem\":{\"工资总额\":\"53206.35\",\"当月工资总额\":\"53206.35\"," +            "\"管理费用及三费计提合计\":\"4508.58\",\"当月社会保险费用合计\":\"13126.95\"," +            "\"当月社会保险费用个人部分\":\"3423.90\",\"当月社会保险费用单位部分\":\"9703.05\"," +            "\"当月其他商业保险费用\":\"0.00\",\"公积金合计\":\"4944.60\",\"公积金个人部分\":\"2472.30\"," +            "\"公积金单位部分\":\"2472.30\",\"其他\":\"0.00\",\"代缴税金\":\"3878.58\"," +            "\"本月应付\":\"0.00\",\"开票金额\":\"69890.28\"}}" +            "]}";    public static void getGson() {        Gson gson = new Gson();        Info info = gson.fromJson(jsonStr, Info.class);        Log.d("json to object", info.toString());        String jsonObject = gson.toJson(info);        Log.d("object to json", jsonObject);    }}

log打印结果:

09-27 16:19:10.946  31970-31983/com.practice.noyet.gsontest D/json to object﹕ Info{list=[CompanyInfo{CompanyName='成都分公司', CompanyId=265, CostTitle='7月工资', Year=2014, Month=7, list=CoseItemEntity{totalSalary='52382.57', monthSalary='52382.58', manageSalary='4578.74', insureSalary='15485.47', insurePersonalSalary='4074.76', insureUnitSalary='11410.71', insureBusinessSalary='0.00', funds='5542.20', personalFunds='2771.10', unitFunds='2771.10', others='0.00', taxes='3948.73', monthPay='0.00', billingAmount='71143.12'}}, CompanyInfo{CompanyName='成都分公司', CompanyId=265, CostTitle='8月工资', Year=2014, Month=8, list=CoseItemEntity{totalSalary='53206.35', monthSalary='53206.35', manageSalary='4508.58', insureSalary='13126.95', insurePersonalSalary='3423.90', insureUnitSalary='9703.05', insureBusinessSalary='0.00', funds='4944.60', personalFunds='2472.30', unitFunds='2472.30', others='0.00', taxes='3878.58', monthPay='0.00', billingAmount='69890.28'}}]}09-27 16:19:10.954  31970-31983/com.practice.noyet.gsontest D/object to json﹕ {"Data":[{"CoseItem":{"开票金额":"71143.12","公积金合计":"5542.20","当月其他商业保险费用":"0.00","当月社会保险费用个人部分":"4074.76","当月社会保险费用合计":"15485.47","当月社会保险费用单位部分":"11410.71","管理费用及三费计提合计":"4578.74","本月应付":"0.00","当月工资总额":"52382.58","其他":"0.00","公积金个人部分":"2771.10","代缴税金":"3948.73","工资总额":"52382.57","公积金单位部分":"2771.10"},"CompanyName":"成都分公司","CostTitle":"7月工资","Month":7,"Year":2014,"CompanyId":265},{"CoseItem":{"开票金额":"69890.28","公积金合计":"4944.60","当月其他商业保险费用":"0.00","当月社会保险费用个人部分":"3423.90","当月社会保险费用合计":"13126.95","当月社会保险费用单位部分":"9703.05","管理费用及三费计提合计":"4508.58","本月应付":"0.00","当月工资总额":"53206.35","其他":"0.00","公积金个人部分":"2472.30","代缴税金":"3878.58","工资总额":"53206.35","公积金单位部分":"2472.30"},"CompanyName":"成都分公司","CostTitle":"8月工资","Month":8,"Year":2014,"CompanyId":265}]}

其中字符串的json格式:

{    "Data": [        {            "CompanyName": "成都分公司",             "CompanyId": 265,             "CostTitle": "7月工资",             "Year": 2014,             "Month": 7,             "CoseItem": {                "工资总额": "52382.57",                 "当月工资总额": "52382.58",                 "管理费用及三费计提合计": "4578.74",                 "当月社会保险费用合计": "15485.47",                 "当月社会保险费用个人部分": "4074.76",                 "当月社会保险费用单位部分": "11410.71",                 "当月其他商业保险费用": "0.00",                 "公积金合计": "5542.20",                 "公积金个人部分": "2771.10",                 "公积金单位部分": "2771.10",                 "其他": "0.00",                 "代缴税金": "3948.73",                 "本月应付": "0.00",                 "开票金额": "71143.12"            }        },         {            "CompanyName": "成都分公司",             "CompanyId": 265,             "CostTitle": "8月工资",             "Year": 2014,             "Month": 8,             "CoseItem": {                "工资总额": "53206.35",                 "当月工资总额": "53206.35",                 "管理费用及三费计提合计": "4508.58",                 "当月社会保险费用合计": "13126.95",                 "当月社会保险费用个人部分": "3423.90",                 "当月社会保险费用单位部分": "9703.05",                 "当月其他商业保险费用": "0.00",                 "公积金合计": "4944.60",                 "公积金个人部分": "2472.30",                 "公积金单位部分": "2472.30",                 "其他": "0.00",                 "代缴税金": "3878.58",                 "本月应付": "0.00",                 "开票金额": "69890.28"            }        }    ]}

gosn知识

1、@SerializedName
  此注解作用在属性上,表明这个属性在序列化成Json的时候,需要将名字序列化成注解的value属性指定的值。
  这个注解将会覆盖任何的FieldNamingPolicy, 包括默认的命名策略。下面是一个介绍@SerializedName注解如何使用
2、通过gson工具把json字符串转换成对象
  Info info = gson.fromJson(jsonStr, Info.class);
3、通过gson工具把对象转换成son字符串
  String jsonObject = gson.toJson(info);

如果对gson的用法想要很深如的理解,可以阅读gson源码:
http://grepcode.com/file/repo1.maven.org/maven2/com.google.code.gson/gson/2.3.1/com/google/gson/Gson.java#Gson
这是一个可以在线阅读各种源码(如Android源码)的网站

0 0
原创粉丝点击