1.解析总是犯糊涂
在图中,[] 中括号表示是jsonarray,{} 小括号 表示对象 这个解析可以写成:
JSONArray array=new JSONArray(result); for(int i=0;i<array.length();i++){ JSONObject object=array.getJSONObject(i); String id=object.optString("id"); String name=object.optString("name"); String deviceId=object.optString("deviceId"); String status=object.optString("status"); String lat=object.optString("lat"); String lng=object.optString("lng"); String antN=object.optString("antN"); String gsmN=object.optString("gsmN"); String gsmB=object.optString("gsmB"); String tdN=object.optString("tdN"); String tdB=object.optString("tdB"); String lteN=object.optString("lteN"); String lteB=object.optString("lteB"); }
2.
JSONObject jsonObject=new JSONObject(s); JSONArray jsonArray=jsonObject.getJSONArray("rows"); for(int i=0;i<jsonArray.length();i++){ JSONObject jsonObject1=jsonArray.getJSONObject(i); String id=jsonObject1.getString("id"); ..... }
3.由于某些字段的缺失, jsonObject.getString("key")会导致解析失败,这时获取字段value可以用 jsonObject.optString("key")。即使没有该字段,解析容错,扔可以通过。
4.
如图上面的第一个箭头: 集合下面直接是字符串,仍然可按照是对象方法解析,然后转成字符串。
JSONObject obj=new JSONObject(s); JSONObject obj1=obj.optJSONObject("result"); JSONObject obj2=obj1.optJSONObject("data"); JSONObject obj3=obj2.optJSONObject("life"); JSONObject obj4=obj3.optJSONObject("info"); JSONArray array=obj4.optJSONArray("chuanyi"); String s_1=array.optString(0).toString(); String s_2=array.optString(1).toString();
5.
实体类可写成:
public class Root { private Info info; public void setInfo(Info info) { this.info = info; } public Info getInfo() { return this.info; } /** * info */ public class Info { private List<String> chuanyi; public void setString(List<String> chuanyi) { this.chuanyi = chuanyi; } public List<String> getString(){ return this.chuanyi; } } }
ss为数据字符串 解析为:
Gson gson=new Gson(); Root root=gson.fromJson(ss,Root.class); Root.Info info=root.getInfo(); List<String> data=info.getString(); for(int i=0;i<data.size();i++){ Log.d(TAG, "GSON: "+data.get(i).toString()); }
6.GSon使用
图上的 code,list,obj,msg;必须要在实体类中对应。其obj的对象名无所谓,List集合中的对象名称无所谓。