下面通过gson对数据进行简单的封装与解析,还是以上篇json解析的 数据为例:
{
"owner": "张三",
"statusCode": 1,
"policyId": "18510060885",
"seqNo": true,
"msg": false,
"status": 0
"insuranceInfo": {
"companyName": "李四",
"companyCode": 12345
"primary": [ {
"amount": 6656,
"insuranceCode": 4566,
"des": "babababa",
"selected": "555",
"buyRate": "45%",
"insuranceName": "王五",
"options": [ { "value": "value", "key": "key" } ] } ],
},
}
首先定义一个实体类对象对要封装的数据的一般定义:
public class Text1 { public String owner; public int statusCode; public int status; public boolean seqNo; public boolean msg; public HashMap insuranceinfo; public String getOwner() { return owner; } public void setOwner(String owner) { this.owner = owner; } public int getStatusCode() { return statusCode; } public void setStatusCode(int statusCode) { this.statusCode = statusCode; } public int getStatus() { return status; } public void setStatus(int status) { this.status = status; } public boolean isSeqNo() { return seqNo; } public void setSeqNo(boolean seqNo) { this.seqNo = seqNo; } public boolean isMsg() { return msg; } public void setMsg(boolean msg) { this.msg = msg; } public HashMap getInsurancoinfo() { return insuranceinfo; } public void setInsurancoinfo(HashMap insurancoinfo) { this.insuranceinfo = insurancoinfo; } @Override public String toString() { return "aaaa [owner=" + owner + ", statusCode=" + statusCode + ", status=" + status + ", seqNo=" + seqNo + ", msg=" + msg + ", insuranceinfo=" + ", insurancoin=" + insuranceinfo + ", getClass()=" + getClass() + ", hashCode()=" + hashCode() + ", toString()=" + super.toString() + "]"; }接下来还是在Activity xml中简单的定义一个TextView对象用来展示封装过得字符串,其实封装过程有好多种,我就用HasMap,和List等进行简单封装具体封装如下:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView=(TextView)findViewById(R.id.text); button=(Button)findViewById(R.id.button); init(); } private void init() { gson=new Gson(); Text1 text=new Text1(); text.owner="张三"; text.statusCode=88; text.status=0; text.seqNo=true; text.msg=false; HashMap<String,Object>insuranceinfo=new HashMap<>(); insuranceinfo.put("companyName","李四"); insuranceinfo.put("companyCode",234); ArrayList<HashMap> primary=new ArrayList<>(); HashMap<String,Object>hash=new HashMap<>(); hash.put("amount",6656); hash.put("insuranceCode",4566); hash.put("des","babababa"); hash.put("selected",true); ArrayList<HashMap>options=new ArrayList<>(); HashMap<String,String>hashM=new HashMap<>(); hashM.put("key","value"); hashM.put("value","key"); options.add(hashM); hash.put("options",options); primary.add(hash); insuranceinfo.put("primary",primary); text.insuranceinfo=insuranceinfo; gson.toJson(text); textView.setText(gson.toJson(text)); inDetail(gson.toJson(text));
最后TextView中显示的内容如下图:
gson相关的解析要比json相对简单一些。但是gson在解析时一般要根据解析的字符串对象建立相应的实体类对象,根据相应的层次关系进行嵌套,就以上面为例实体对象可以定义为:
public class Text1 { public String owner; public int statusCode; public int status; public boolean seqNo; public boolean msg; public List<Insuranceinfo> insuranceinfo;
public class Insuranceinfo { public String companyName; public int companyCode; public List<Primary> primary;
public class Primary { public int amount; public int insuranceCode; public String des; public boolean selected; public List<Options>options;
public class Options { public String key; public String value;具体的git set方法自己生成就是了,接下来就是一般的解析了,gsonStr为封装传过来的字符串
private void inDetail(String gsonStr) { if(!gsonStr.isEmpty()){ Text1 tex=new Text1(); Type type = new TypeToken<Text1>() { }.getType(); tex=gson.fromJson(gsonStr,type); final Text1 finalTex = tex; button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { List<Insuranceinfo>insuranceinfo=finalTex.getInsurancoinfo(); textView.setText(finalTex.getStatusCode()+ finalTex.getOwner()+ finalTex.getStatus()+finalTex.getInsurancoinfo().toString()); } }); }对于上述应用gson如果是在eclipse上调用gson要导入gson相关联的包,可以在下面地址下载:
http://download.csdn.net/detail/itachi85/8617065
如果用AndroidStudio的话可以在Project Structure ->Dependencies 中直接搜索Gson,Studio就会帮你自动下载相应的包只要正确选择就行。别的开源包等也是一样