JSON數據解析

生成JSON數據的源碼:http://download.csdn.net/detail/chexitianxia/9137419

客戶端activity_main.xml文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <Button
        android:id="@+id/person"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="解析person數據" />
 	<Button
        android:id="@+id/persons"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="解析List嵌套person數據" />
 	<Button
        android:id="@+id/liststring"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="解析List嵌套String數據" />
 	<Button
        android:id="@+id/listmap"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="解析listmap數據" />
</LinearLayout>
Main.java

public class Main extends Activity implements OnClickListener{
	private Button person,persons,liststring,listmap;
	private static final String TAG="Main";
    @Override
    public void onCreate(Bundle savedInstanceState) {
    	StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()       
        .detectDiskReads()       
        .detectDiskWrites()       
        .detectNetwork()   // 這裏可以替換爲detectAll() 就包括了磁盤讀寫和網絡I/O       
        .penaltyLog()     //打印logcat,當然也可以定位到dropbox,通過文件保存相應的log  
        .build());       
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()       
        .detectLeakedSqlLiteObjects() //探測SQLite數據庫操作   
        .penaltyLog()       //打印logcat
        .penaltyDeath()       
        .build()); 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        person = (Button)this.findViewById(R.id.person);
        persons = (Button)this.findViewById(R.id.persons);
        liststring = (Button)this.findViewById(R.id.liststring);
        listmap = (Button)this.findViewById(R.id.listmap);
        person.setOnClickListener(this);
        persons.setOnClickListener(this);
        liststring.setOnClickListener(this);
        listmap.setOnClickListener(this);
           

    }

    @Override
    public void onClick(View v) {
    	// TODO Auto-generated method stub
    	switch (v.getId()) {
		case R.id.person:	
			String path="http://192.168.1.103:8080/jsonProject/servlet/JsonAction?action_flag=person";
			String jsonString = HttpUtils.getJsonContent(path);
			
			Person person = JsonTools.getPerson("person", jsonString);
			Log.i(TAG,person.toString());
			break;
		case R.id.persons:	
			String path2="http://192.168.1.103:8080/jsonProject/servlet/JsonAction?action_flag=persons";
			String jsonString2 = HttpUtils.getJsonContent(path2);
			List<Person> list2 = JsonTools.getPersons("persons", jsonString2);
			Log.i(TAG,list2.toString());
			break;
		case R.id.liststring:
			String path3="http://192.168.1.103:8080/jsonProject/servlet/JsonAction?action_flag=liststring";
			String jsonString3 = HttpUtils.getJsonContent(path3);
			List<String> list3 = JsonTools.getList("liststring", jsonString3);
			Log.i(TAG,list3.toString());
			break;
		case R.id.listmap:
			String path4="http://192.168.1.103:8080/jsonProject/servlet/JsonAction?action_flag=listmap";
			String jsonString4 = HttpUtils.getJsonContent(path4);
			List<Map<String, Object>> list4 = JsonTools.listKeyMaps("listmap", jsonString4);
			Log.i(TAG,list4.toString());
			break;

		
		}
    }
}


HttpUtils.java

public class HttpUtils {
	private static final String TAG = "Main";

	public HttpUtils() {
		// TODO Auto-generated constructor stub
		
	}

	public static String getJsonContent(String url_path) {
		
		try {
			URL url = new URL(url_path);
			
			HttpURLConnection connection = (HttpURLConnection) url
					.openConnection();
			connection.setConnectTimeout(3000);			
			connection.setRequestMethod("GET");
			connection.setDoInput(true);			
			int code = connection.getResponseCode();			
			if (code == 200) {
				return changeInputStream(connection.getInputStream());
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
		
		return "";
	}

	private static String changeInputStream(InputStream inputStream) {
		// TODO Auto-generated method stub
		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) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		return jsonString;
	}
}

Person.java

public class Person {
	private int id;
	private String name;
	private String address;
	@Override
	public String toString() {
		return "Person [id=" + id + ", name=" + name + ", address=" + address
				+ "]";
	}
	public Person() {
		// TODO Auto-generated constructor stub
	}
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public Person(int id, String name, String address) {
		super();
		this.id = id;
		this.name = name;
		this.address = address;
	}
	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;
	}

}

JsonTools.java

public class JsonTools {

	public JsonTools() {
		// TODO Auto-generated constructor stub
	}
	public static Person getPerson(String key,String jsonString){
		Person person = new Person();
		try {
			JSONObject jsonObject = new JSONObject(jsonString);
			JSONObject personObject = jsonObject.getJSONObject("person");
			person.setId(personObject.getInt("id"));
			person.setName(personObject.getString("name"));
			person.setAddress(personObject.getString("address"));
		} catch (Exception e) {
			// TODO: handle exception
		}
		return person;
		
	}
	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 (Exception e) {
			// TODO: handle exception
		}
		return list;
	}
	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 (Exception e) {
			// TODO: handle exception
		}
		return list;
		
	}
	public static List<Map<String,Object>> listKeyMaps(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 (Exception e) {
			// TODO: handle exception
		}
		return list;
		
	}
} 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章