Andorid三种解析Json详解

来源:互联网 发布:nginx 跨域访问 错误 编辑:程序博客网 时间:2024/06/05 19:24

可以使用普通的json解析方法即JsonObject和JsonArray的配合使用,这对于解析小数据的json数据还是比较实用,但是当解析json数据比较复杂的时候使用Gosn比较好,如果大家感兴趣的话网上有大量的实例可以到网上去看看。 

首先客户端也要导入gson的两个jar包,json的jar就不需要导入了(因为android项目中已经集成了json的jar包所以这里无需导入

用到JsonObject和JsonArray区别

区别在于JSONObject是一个{}包裹起来的一个对象(Object),而JSONArray则是[]包裹起来的一个数组(Array),知道这点区别,相信在您以后应用Struts-json的时候,一定不会出现前台得到的数据不能显示这样的问题了,因为通常这样的问题都是因为json数据格式不正确引起的

第一种

1.工具类HttpUtil

public static AsyncHttpClient client=new AsyncHttpClient();

static{

//设置连接超时时间

client.setTimeOut(30000);

}

public static void post(String url,RequestParams params,JsonHttpResponseHandler responseHandler){

client.post(getAbsoluteUrl(url),params,responseHandler);

}

2.MainActivity类

private JSONArray jsonObj;
private List<FindContact> fc;
private List<FindContact> fc2;
JSONObject postData = new JSONObject();
RequestParams para=new RequestParams();//来获取参数是一种比较有效的途径
postData.put("pageNo",pageNo);
para.put("postData",postData.toString());
HttpUtil.post(String url,RequestParams params,responseHandler,new JsonHttpResponseHandler(){

public void onSuccess(int arg0,JSONObject arg1){


if(arg1.get("arg1.get("Status").toString().equals("0")")){
jsonObj=arg1.getJSONArray("postData");//通过arg1对象的getJSONArray()方法将接口数据转换为数组的形式,返回一个jsonArray对象
//解析实体类
fc2=JSON.parseArray(jsonObj.toString(),FindContact.class);
//此处为什么要用for循环来将fc2中的数据放入fc中?
//因为fc2中的数据时从接口的实体类返回过来的
for(int i=0;i<fc2.size(),i++){
fc.add(fc2.get(i));
将fc中的数据塞进适配器中....

}
}
}
}
){
};

第二种

1.工具类同上

2.MainActivity类

private  ArrayList<TaskEntity> mList = new ArrayList<TaskEntity>();
mList.clear();
final ArrayList<TaskEntity> tmpArray=new ArrayList<TaskEntity>();
String urlString=ApiConstant.URL+ApiConstant.findTasks;
RequestParams params=new RequestParams();//绑定参数
params.put("memberId",userId);
HttpUtil.get(urlString,params,new JsonHttpResponseHandler(){
public void onSuccess(JSONObject jObj){//获取数据成功会调用
JSONArray jsonArray=jObj.getJSONArray("Data");//将接口数据转化为数组
//此处for循环难道是要将数据塞进实体类中
for(int i=0;i<jsonArray.length();i++){
TaskEntity task=new TaskEntity();
JSONObject jsonObj=(JSONObject)jsonArray.opt(i);
if(jsonObject.getString("type").equals("0")&&!jsonObject.getString("id").equals("6f169b686bb44af880d0af37b65de821")){
task.setMessage(jsonObject.getString);
task.setDone(jsonObject.getBoolean("finished"));
task.setPoint(jsonObject.getString("point"));
task.setDescription(jsonObject.getString("description");
tmpArray.add(task);//将从接口的实体类中的数据塞进tmpArray集合中
}
}
if(tmpArray!=null){
for(TaskEntity tt:tmpArray){//for循环遍历tmpArray
mList.add(tt);//将数据塞进mList集合中
}
}


}


});

第三种,使用Gson,解析复杂的形式

如:

{
    "error": 0,
    "status": "success",
    "date": "2014-05-10",
    "results": [
        {
            "currentCity": "南京",
            "weather_data": [
                {
                    "date": "周六(今天, 实时:19℃)",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/dayu.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/dayu.png",
                    "weather": "大雨",
                    "wind": "东南风5-6级",
                    "temperature": "18℃"
                },
                {
                    "date": "周日",
                    "dayPictureUrl": "http://api.map.baidu.com/images/weather/day/zhenyu.png",
                    "nightPictureUrl": "http://api.map.baidu.com/images/weather/night/duoyun.png",
                    "weather": "阵雨转多云",
                    "wind": "西北风4-5级",
                    "temperature": "21 ~ 14℃"
                }
            ]
        }
    ]
1.定义如下一些的javaBean数据

Status.java

  1. private String error;  
  2.         private String status;  
  3.         private String date;  
  4.         private List<Results> results;  
  5.         public String getError()   
  6.         {  
  7.             return error;  
  8.         }  
  9.         public void setError(String error)   
  10.         {  
  11.             this.error = error;  
  12.         }  
  13.           
  14.         public String getStatus()   
  15.         {  
  16.             return status;  
  17.         }  
  18.         public void setStatus(String status)   
  19.         {  
  20.             this.status = status;  
  21.         }  
  22.         public String getDate()   
  23.         {  
  24.             return date;  
  25.         }  
  26.         public void setDate(String date)   
  27.         {  
  28.             this.date = date;  
  29.         }  
  30.         public List<Results> getResults()   
  31.         {  
  32.             return results;  
  33.         }  
  34.         public void setResults(List<Results> results)   
  35.         {  
  36.             this.results = results;  
  37.         }  
  38.         @Override  
  39.         public String toString()   
  40.         {  
  41.             return "Status [error=" + error + ", status=" + status  
  42.                     + ", date=" + date + ", results=" + results + "]";  
  43.         }  
  1. private String error;  
  2.         private String status;  
  3.         private String date;  
  4.         private List<Results> results;  
  5.         public String getError()   
  6.         {  
  7.             return error;  
  8.         }  
  9.         public void setError(String error)   
  10.         {  
  11.             this.error = error;  
  12.         }  
  13.           
  14.         public String getStatus()   
  15.         {  
  16.             return status;  
  17.         }  
  18.         public void setStatus(String status)   
  19.         {  
  20.             this.status = status;  
  21.         }  
  22.         public String getDate()   
  23.         {  
  24.             return date;  
  25.         }  
  26.         public void setDate(String date)   
  27.         {  
  28.             this.date = date;  
  29.         }  
  30.         public List<Results> getResults()   
  31.         {  
  32.             return results;  
  33.         }  
  34.         public void setResults(List<Results> results)   
  35.         {  
  36.             this.results = results;  
  37.         }  
  38.         @Override  
  39.         public String toString()   
  40.         {  
  41.             return "Status [error=" + error + ", status=" + status  
  42.                     + ", date=" + date + ", results=" + results + "]";  
  43.         }  
Results.java

  1. public class Results   
  2. {     
  3.     private String currentCity;  
  4.     private List<Weather> weather_data;  
  5.     public String getCurrentCity()   
  6.     {  
  7.         return currentCity;  
  8.     }  
  9.     public void setCurrentCity(String currentCity)   
  10.     {  
  11.         this.currentCity = currentCity;  
  12.     }  
  13.     public List<Weather> getWeather_data()   
  14.     {  
  15.         return weather_data;  
  16.     }  
  17.     public void setWeather_data(List<Weather> weather_data)   
  18.     {  
  19.         this.weather_data = weather_data;  
  20.     }  
  21.     @Override  
  22.     public String toString()   
  23.     {  
  24.         return "Results [currentCity=" + currentCity + ", weather_data="  
  25.                 + weather_data + "]";  
  26.     }  
Weather.java

  1. public class Weather {  
  2.     private String date;  
  3.                 private String dayPictureUrl;  
  4.                 private String nightPictureUrl;  
  5.                 private String weather;  
  6.                 private String wind;  
  7.                 private String temperature;  
  8.                 public String getDate() {  
  9.                     return date;  
  10.                 }  
  11.                 public void setDate(String date) {  
  12.                     this.date = date;  
  13.                 }  
  14.                 public String getDayPictureUrl() {  
  15.                     return dayPictureUrl;  
  16.                 }  
  17.                 public void setDayPictureUrl(String dayPictureUrl) {  
  18.                     this.dayPictureUrl = dayPictureUrl;  
  19.                 }  
  20.                 public String getNightPictureUrl() {  
  21.                     return nightPictureUrl;  
  22.                 }  
  23.                 public void setNightPictureUrl(String nightPictureUrl) {  
  24.                     this.nightPictureUrl = nightPictureUrl;  
  25.                 }  
  26.                 public String getWeather() {  
  27.                     return weather;  
  28.                 }  
  29.                 public void setWeather(String weather) {  
  30.                     this.weather = weather;  
  31.                 }  
  32.                 public String getWind() {  
  33.                     return wind;  
  34.                 }  
  35.                 public void setWind(String wind) {  
  36.                     this.wind = wind;  
  37.                 }  
  38.                 public String getTemperature() {  
  39.                     return temperature;  
  40.                 }  
  41.                 public void setTemperature(String temperature) {  
  42.                     this.temperature = temperature;  
  43.                 }  
  44.                 @Override  
  45.                 public String toString() {  
  46.                     return "Weather [date=" + date + ", dayPictureUrl="  
  47.                             + dayPictureUrl + ", nightPictureUrl="  
  48.                             + nightPictureUrl + ", weather=" + weather  
  49.                             + ", wind=" + wind + ", temperature=" + temperature  
  50.                             + "]";  
  51.                 }   
然后具体的javabean定义好了就将解析数据了,下面就是我的解析数据类
[java] view plaincopy
  1. public class MainActivity extends Activity   
  2. {  
  3.     private Button tojson;    
  4.     RequestQueue mQueue;      
  5.     StringRequest stringRequest;      
  6.     Gson gson;  
  7.     String str;  
  8.   
  9.     @Override  
  10.     protected void onCreate(Bundle savedInstanceState)   
  11.     {  
  12.         super.onCreate(savedInstanceState);  
  13.         setContentView(R.layout.activity_main);  
  14.           
  15.         tojson = (Button)findViewById(R.id.tojson);  
  16.         gson = new Gson();  
  17.   
  18.     mQueue = Volley.newRequestQueue(MainActivity.this);   
  19.          //http://10.19.20.12/upgrade/test.txt是测试使用的json数据  
  20.         stringRequest = new StringRequest("http://10.19.20.12/upgrade/test.txt",  
  21.                 new Response.Listener<String>()   
  22.                 {  
  23.                     @Override  
  24.                     public void onResponse(String response)   
  25.                     {  
  26.                         Log.d("TAG", response);  
  27.                         System.out.println("response="+response);  
  28.                         Status status = gson.fromJson(response, Status.class);  
  29.                         System.out.println("status="+status);  
  30.                         System.out.println("-------------------------------------");  
  31.                         List<Results> result = status.getResults();  
  32.                         System.out.println("result="+result);  
  33.                           
  34.                     }  
  35.                 },   
  36.                 new Response.ErrorListener()   
  37.                 {  
  38.                     @Override  
  39.                     public void onErrorResponse(VolleyError error)   
  40.                     {  
  41.                         Log.e("TAG", error.getMessage(), error);  
  42.                     }  
  43.   
  44.                 });  
  45.     
  46.         tojson.setOnClickListener(new OnClickListener()   
  47.         {         
  48.             @Override  
  49.             public void onClick(View v)   
  50.             {  
  51.                 mQueue.add(stringRequest);  
  52.             }  
  53.         });       
  54.     }  
  55.   
  56.       
  57.    
  58. }

0 0