JSon解析

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

今天多一点积累,明天少一分烦恼
原文地址:https://www.cnblogs.com/galibujianbusana/p/6202582.html