最近碰到了解析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源码)的网站