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

最近碰到了解析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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值