android json 解析

一、json简介

    json指的是javascript对象表示法(javascript object notation),它是一种轻量级文本数据交换格式,类似于xml,但比xml更小,更快,更易解析(xml需要下载到手机端进行解析);

    json是基于javascript的一个子集,它使用javascript语法来描述数据对象,但是json任然独立于语言和平台,json解析器和json库支持许多不同编程语言,同时也易于机器解析和生成;

优酷:http://v.youku.com/v_show/id_XODYzMTEwODY4.html

爱奇艺:http://www.iqiyi.com/w_19rsb9thy1.html#vfrm=5-7-4-1(涉及服务器的搭建可见视频)

二、json数据解析

    1、json object(多个,也可以单个)

       {"person":{"address":"上海黄浦区","id":1001,"name":"jack"}} 

    2、解析,一个对象,多组值,可以使用相同的语法表示多个值(每个值包含多个记录):
       这里最值得注意的是,能够表示多个值,每个值进而包含多个值。但是还应该注意,在不同的主条目,记录中实际的名称 / 值对可以       
       不一样。JSON 是完全动态的,允许在 JSON 结构的中间改变表示数据的方式。在处理 JSON 格式的数据时,没有需要遵守的预定义的约束。所以,在同样的数据结构中,可以改变表       示数据的方式,甚至可以以不同方式表示同一事物。

       {"persons":[{"address":"上海黄浦区","id":1001,"name":"jack"},{"address":"上海闵行区","id":1002,"name":"rose"},{"address":"上海黄浦区","id":1003,"name":"mick"}]}
      
    3、解析json Array

       {"listString":["北京","上海","湖南"]}

    4、解析json object 和 json array 混合对象

       {"listMap":[{"id":1001,"address":"北京","name":"jack"},{"id":1001,"address":"上海","name":"rose"}]}

文件目录:


activity_main.xml代码不再给出


public class MainActivity extends Activity {
	
	private Button btn_person;
	private Button btn_persons;
	private Button btn_listString;
	private Button btn_listMap;
	private TextView tv_show;
	
	private static String PATH = "http://192.168.1.100:8080/2.9/com/JsonServlet";  
	private static final String TAG = "MainActivity"; 

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		btn_person = (Button)findViewById(R.id.btn_person);
		btn_persons = (Button)findViewById(R.id.btn_persons);
		btn_listString = (Button)findViewById(R.id.btn_listString);
		btn_listMap = (Button)findViewById(R.id.btn_listMap);
		tv_show = (TextView)findViewById(R.id.tv_show);
		
		btn_person.setOnClickListener(new MyButtonListenerPersion());
		btn_persons.setOnClickListener(new MyButtonListenerPersions());
		btn_listString.setOnClickListener(new MyButtonListenerlistString());
		btn_listMap.setOnClickListener(new MyBuutonListenerlistMap());
		
	}
	
	class MyButtonListenerPersion implements OnClickListener{

		@Override
		public void onClick(View v) {
			
			 	String path1=PATH+"?action_flag=person";  
	            String jsonString1 = HttpUtils.getJsonContent(path1);  
	            Person person = JsonTools.getPerson("person", jsonString1); 
	            tv_show.setText(person.toString());
	            Log.i(TAG, person.toString());              
		}	
	}
	
	class MyButtonListenerPersions implements OnClickListener{

		@Override
		public void onClick(View v) {
			
			 String path2=PATH+"?action_flag=persons";  
	            String jsonString2 = HttpUtils.getJsonContent(path2);  
	            List<Person> list2 = JsonTools.getPersons("persons", jsonString2);  
	            tv_show.setText(list2.toString());
	            Log.i(TAG, list2.toString()); 	
		}	
	}
	
	class MyButtonListenerlistString implements OnClickListener{

		@Override
		public void onClick(View v) {
			
			String path3=PATH+"?action_flag=listString";  
            String jsonString3 = HttpUtils.getJsonContent(path3);  
            List<String> list3 = JsonTools.getList("listString", jsonString3);  
            tv_show.setText(list3.toString());
            Log.i(TAG, list3.toString());
			
		}	
	}
	
	class MyBuutonListenerlistMap implements OnClickListener{

		@Override
		public void onClick(View v) {
			
			String path4=PATH+"?action_flag=listMap";  
            String jsonString4 = HttpUtils.getJsonContent(path4);  
            List<Map<String,Object>> list4 = JsonTools.getListMap("listMap", jsonString4);  
            tv_show.setText(list4.toString());
            Log.i(TAG, list4.toString()); 
			
		}		
	}
	
}

/********************************************************************************************************************************************************************************/

public class Person {

    private int id;
    private String name;
    private String address;

    public Person() {
        super();
    }

    public Person(int id, String name, String address) {
        super();
        this.id = id;
        this.name = name;
        this.address = address;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    @Override
    public String toString() {
        return "address=" + address + ", id=" + id + ", name=" + name;
    }

}

/************************************************************************************************************************************************************************************/

public class JsonTools {
	
	 public JsonTools() {  
         
	    }  
	      
	    /**  
	     * 获取对象数据  
	     * @param key  
	     * @param jsonString  
	     * @return  
	     */  
	    public static Person getPerson(String key,String jsonString){  
	        Person person = new Person();  
	        try {
	        	//构建一个JSONObject jsontokener
	            JSONObject jsonObject = new JSONObject(jsonString);  
	            //得到JSONObject值与密钥相关,就是对象
	            JSONObject personObject = jsonObject.getJSONObject(key);  
	           //取得数据
	            person.setId(personObject.getInt("id"));  
	            person.setName(personObject.getString("name"));  
	            person.setAddress(personObject.getString("address"));  
	        } catch (JSONException e) {  
	            e.printStackTrace();  
	        }  
	        return person;  
	    }  
	      
	    /**  
	     * 获取对象数组数据  
	     * @param key  
	     * @param jsonString  
	     * @return  
	     */  
	    public static List<Person> getPersons(String key,String jsonString){  
	        List<Person> list = new ArrayList<Person>();  
	        try {  
	            JSONObject jsonObject = new JSONObject(jsonString);  
	            //返回json的数组  
	            JSONArray jsonArray = jsonObject.getJSONArray(key);  
	            for(int i=0;i<jsonArray.length();i++){  
	                JSONObject jsonObject2 = jsonArray.getJSONObject(i);  
	                Person person = new Person();  
	                person.setId(jsonObject2.getInt("id"));  
	                person.setName(jsonObject2.getString("name"));  
	                person.setAddress(jsonObject2.getString("address"));  
	                list.add(person);  
	            }  
	        } catch (JSONException e) {  
	            e.printStackTrace();  
	        }  
	          
	        return list;  
	    }  
	    /**  
	     * 获取String数组数据  
	     * @param key  
	     * @param jsonString  
	     * @return  
	     */  
	    public static List<String> getList(String key,String jsonString){  
	        List<String> list = new ArrayList<String>();  
	        try {  
	            JSONObject jsonObject = new JSONObject(jsonString);  
	            JSONArray jsonArray = jsonObject.getJSONArray(key);  
	            for(int i=0;i<jsonArray.length();i++){  
	                String msg = jsonArray.getString(i);  
	                list.add(msg);  
	            }  
	        } catch (JSONException e) {  
	            e.printStackTrace();  
	        }  
	        return list;  
	    }  
	    /**  
	     * 获取对象的Map集合数据  
	     * @param key  
	     * @param jsonString  
	     * @return  
	     */  
	    public static List<Map<String,Object>> getListMap(String key,String jsonString){  
	        List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();  
	        try {  
	            JSONObject jsonObject = new JSONObject(jsonString);  
	            JSONArray jsonArray = jsonObject.getJSONArray(key);  
	            for(int i=0;i<jsonArray.length();i++){  
	                JSONObject jsonObject2 = jsonArray.getJSONObject(i);  
	                Map<String,Object> map = new HashMap<String, Object>();  
	                Iterator<String> iterator = jsonObject2.keys();  
	                while(iterator.hasNext()){  
	                    String json_key = iterator.next();  
	                    Object json_value = jsonObject2.get(json_key);  
	                    if(json_value==null){  
	                        json_value = "";  
	                    }  
	                    map.put(json_key, json_value);  
	                }  
	                list.add(map);  
	            }  
	        } catch (JSONException e) {  
	            e.printStackTrace();  
	        }  	          
	        return list;  
	    }  

}

/************************************************************************************************************************************************************************************/

public class HttpUtils {
	
	/*
	 * 打开远程链接getContent
	 */
	
	public HttpUtils() {  
    }  
      
    public static String getJsonContent(String path){  
        try {  
        	//指定资源参数实例
            URL url = new URL(path);
            //url.openConnection()指定打开一个远程资源
            //HttpURLConnection抽象的Http连接方法extends URLConnection
            HttpURLConnection connection = (HttpURLConnection)url.openConnection();  
            //在3秒内不能建立连接,将抛异常
            connection.setConnectTimeout(3000);
            //设置请求的命令将被发送到远程HTTP服务器。这个方法只能在连接称为。
            connection.setRequestMethod("GET");
            //设置标志指示是否允许输入这个URLConnection
            connection.setDoInput(true);  
            //得到服务器返回的参数值
            int code = connection.getResponseCode();  
            if(code == 200){  
                return changeInputStream(connection.getInputStream());  
            }  
        } catch (MalformedURLException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return null;  
    }  
  
    /**  
     * 将一个输入流转换成指定编码的字符串    
     * @param inputStream  
     * @return  
     */  
    private static String changeInputStream(InputStream inputStream) {  
        String jsonString = "";  
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();  
        int len = 0;  
        byte[] data = new byte[1024];  
        try {  
            while((len=inputStream.read(data))!=-1){  
                outputStream.write(data,0,len);  
            }  
            jsonString = new String(outputStream.toByteArray());  
        } catch (IOException e) {  
            e.printStackTrace();  
        }  
        return jsonString;  
    }  

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值