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集合中的对象名称无所谓。