json解析简单数据<一>

这两天在翻新项目,之前写项目的时候,每次请求服务器返回数据时都要定义对象,代码显的很臃肿,于是查了相关资料,这次使用谷歌的json自带的几个类没有定义对象实现对服务器返回数据进行了解析。

本次解析使用到了android中和JSON解析相关的JSONObject和JSONArray类,另外还有JSONStringer和JSONTokener,JSONException这几个类和JSON解析有关,大家可以查阅一下。

先说三种常见的json数据类型。

数据类型01:

	[
	    {
	        "id": 1,
	        "name": "小猪"
	    },
	    {
	        "id": 2,
	        "name": "小猫"
	    }
	]	
数据类型02:

	{
	    "arrayData": [
	        {
	            "id": 1,
	            "name": "小猪"
	        },
	        {
	            "id": 2,
	            "name": "小猫"
	        }
	    ],
	    "success": true,
	    "total": 2
	}

数据类型03:

	{
	    "age": 23,
	    "content": {
	        "questions": [
	            {
	                "answer": "小猪",
	                "question": "what's your name?"
	            },
	            {
	                "answer": "23",
	                "question": "what's your age"
	            }
	        ],
	        "questionsTotal": 2
	    },
	    "name": "小猪"
	}	

不定义新的对象,直接使用json中的JSONArray和JSONObject进行数据转换,废话不多说,直接上代码(代码读万行,敲码如有神^_^):


public class MainActivity extends Activity {

	String jsonString01 = "[{\"id\":1,\"name\":\"小猪\"},{\"id\":2,\"name\":\"小猫\"}]";  
	String jsonString02 = "{\"total\":2,\"success\":true,\"arrayData\":[{\"id\":1,\"name\":\"小猪\"},{\"id\":2,\"name\":\"小猫\"}]}";  
	String jsonString03 = "{\"name\":\"小猪\", \"age\":23,\"content\":{\"questionsTotal\":2,\"questions\": [ { \"question\": \"what's your name?\", \"answer\": \"小猪\"},{\"question\": \"what's your age\", \"answer\": \"23\"}]}}";  

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        JsonfromTest01();
        JsonfromTest02();
        JsonfromTest03();
    }
	/****
	 * 不定义bean对象
     * 使用json解析第一种数据类型
     */
    private void JsonfromTest01() {
        try {
			JSONArray jsonArray = new JSONArray(jsonString01); //数据直接为一个数组形式,所以可以直接 用android提供的框架JSONArray读取JSON数据,转换成Array   
			
			for (int i = 0; i < jsonArray.length(); i++) {   
			    JSONObject item = jsonArray.getJSONObject(i); //每条记录又由几个Object对象组成   	
			    int id = item.getInt("id");     			  // 获取对象对应的值   
                String name = item.getString("name"); 
                Log.i("JsonfromTest01解析结果", "id = " + id + "; name = " + name);      //打印结果         
			}
		} catch (JSONException e) {
			e.printStackTrace();
		}
    }

	/****
	 * 不定义bean对象
     * 使用json解析第二种数据类型
     */
    public void JsonfromTest02(){
		try {
			int total;
			Boolean success;
			JSONObject jsonObject=new JSONObject(jsonString02);     //返回的数据形式是一个Object类型,所以可以直接转换成一个Object   
			total = jsonObject.getInt("total");   
			success = jsonObject.getBoolean("success");
			Log.i("JsonfromTest02解析结果", "total = " + total + "; success = " + success);   //测试数据  
            JSONArray jsonArray = jsonObject.getJSONArray("arrayData");//里面有一个数组数据,可以用getJSONArray获取数组   
            for (int i = 0; i < jsonArray.length(); i++) {   
			    JSONObject item = jsonArray.getJSONObject(i); //每条记录又由几个Object对象组成   	
			    int id = item.getInt("id");     			  // 获取对象对应的值   
                String name = item.getString("name"); 
                Log.i("JsonfromTest02解析结果", "id = " + id + "; name = " + name);     //打印结果         
            }
			
		} catch (JSONException e) {
			e.printStackTrace();
		}   	
    }
    
    
    
    
	/****
	 * 不定义bean对象
     * 使用json解析第三种数据类型
     */  
    public void JsonfromTest03(){
    	try {
            JSONObject jsonObject = new JSONObject(jsonString03);     //返回的数据形式是一个Object类型,所以可以直接转换成一个Object   
            String name=jsonObject.getString("name");          
            int age=jsonObject.getInt("age");   
            Log.i("JsonfromTest03解析结果", "name = " + name + "; age = " + age); //测试数据  
     
            JSONObject contentObject=jsonObject.getJSONObject("content");       //获取对象中的对象   
            String questionsTotal=contentObject.getString("questionsTotal");    //获取对象中的一个值   
            Log.i("JsonfromTest03解析结果", "questionsTotal = " + questionsTotal);   //测试数据              
            
            
    		JSONArray jsonArray = contentObject.getJSONArray("questions");//里面有一个数组数据,可以用getJSONArray获取数组   
    		for (int i = 0; i < jsonArray.length(); i++) {   
    			JSONObject item = jsonArray.getJSONObject(i); //每条记录又由几个Object对象组成   	
    			String answer = item.getString("answer");     			  // 获取对象对应的值   
    			String question = item.getString("question"); 
    			Log.i("JsonfromTest03解析结果", "answer = " + answer + "; question = " + question);   //打印结果         
    		}
    		
    	} catch (JSONException e) {
    		e.printStackTrace();
    	}   	
    }
    
    
    
}


看看代码,自己慢慢体会吧。另外附上代码原件:demo下载

http://download.csdn.net/detail/abc6368765/9461908


你可能感兴趣的:(json解析简单数据,不定义对象)