Android中解析Json数据



一、原理分析


二、代码实现(整套代码的下载地址http://download.csdn.net/detail/caihongshijie6/6701279)

所需要的JSON的相关的jar包的下载地址http://download.csdn.net/detail/caihongshijie6/6701285


1、服务器端(主要用于生成JSON格式的字符串)

  1)JsonAction

package com.njupt.action;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.njupt.service.JsonService;
import com.njupt.tools.JsonTools;

public class JsonAction extends HttpServlet {

	private JsonService service;
	/**
	 * Constructor of the object.
	 */
	public JsonAction() {
		super();
	}

	/**
	 * Destruction of the servlet. <br>
	 */
	public void destroy() {
		super.destroy(); // Just puts "destroy" string in log
		// Put your code here
	}

	/**
	 * The doGet method of the servlet. <br>
	 *
	 * This method is called when a form has its tag value method equals to get.
	 * 
	 * @param request the request send by the client to the server
	 * @param response the response send by the server to the client
	 * @throws ServletException if an error occurred
	 * @throws IOException if an error occurred
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		doPost(request, response);
	}

	
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		
		response.setContentType("text/html;charset=utf-8");
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		
		PrintWriter out = response.getWriter();
//		String jsonString = JsonTools.createJsonString("persons", service.getListPerson());
		
		String jsonString = "";
		String action_flag = request.getParameter("action_flag");
		if(action_flag.equals("person")){
			jsonString = JsonTools.createJsonString("person", service.getPerson());
		}else if(action_flag.equals("persons")){
			jsonString = JsonTools.createJsonString("persons", service.getListPerson());
		}else if(action_flag.equals("liststring")){
			jsonString = JsonTools.createJsonString("liststring", service.getListString());
		}else if(action_flag.equals("listmap")){
			jsonString = JsonTools.createJsonString("listmap", service.getListMaps());
			
		}
		out.println(jsonString);
		out.flush();
		out.close();
	}

	/**
	 * Initialization of the servlet. <br>
	 *
	 * @throws ServletException if an error occurs
	 */
	public void init() throws ServletException {
		service = new JsonService();
	}

}


2)JsonService

package com.njupt.service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.collections.map.HashedMap;

import com.njupt.pojo.Person;

public class JsonService {
	public JsonService() {
		// TODO Auto-generated constructor stub
	}
	
	public Person getPerson(){
		Person person = new Person(1001,"zhangzetian","beijing");
	    
		return person;
	}
	
	
	public List<Person> getListPerson(){
		List<Person> list = new ArrayList<Person>();
		
		Person person1 = new Person(1003,"huangjundong","beijing");
		Person person2 = new Person(1004,"zhangzetian","guangdong");
		
		list.add(person1);
		list.add(person2);
	 
		return list;
	}
	
	public List<String> getListString(){
		List<String> list = new ArrayList<String>();
		list.add("beijing");
		list.add("shanghai");
		list.add("hunan");
		
		return list;
	}
	
	public List<Map<String,Object>> getListMaps(){
		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
		Map<String,Object> map1 = new HashMap<String,Object>();
	    map1.put("id", 1001);
	    map1.put("name", "huangjundong");
	    map1.put("address", "beijing");
	    
	    Map<String,Object> map2 = new HashMap<String, Object>();
	    map2.put("id", 1002);
	    map2.put("name", "zhangzetian");
	    map2.put("address", "beijing");
	    
	    list.add(map1);
	    list.add(map2);
	    
	    return list;
	}
}


3)Person

package com.njupt.pojo;

public class Person {
	private int id;
	private String name;
	private String address;
	
	public Person() {
		// TODO Auto-generated constructor stub
	}

	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 "Person [address=" + address + ", id=" + id + ", name=" + name
				+ "]";
	}
	
	
}

4)JsonTools

package com.njupt.tools;

import net.sf.json.JSONObject;

/**
 * 服务器端的JSONTools主要用于生成JSON
 * @author Administrator
 *
 */
public class JsonTools {

	public JsonTools() {
		// TODO Auto-generated constructor stub
	}
	
	
	public static String createJsonString(String key,Object value){
		JSONObject jsonObject = new JSONObject();
		jsonObject.put(key, value);
		return jsonObject.toString();
	}
}



2、Android端

1)main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
     <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="解析persons数据"
        />
    
    <Button 
        android:id="@+id/liststring"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="解析list嵌套person数据"
        />
    
    <Button 
        android:id="@+id/listmap"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="解析person嵌套map数据"
        />

</LinearLayout>


2)MainActivity

package com.njupt.android_json;

import java.util.List;
import java.util.Map;

import com.njupt.pojo.Person;
import com.njupt.tools.JsonTools;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	private Button person;
	private Button persons;
	private Button liststring;
	private Button listmap;

	private String path = "http://192.168.1.104:8080/JsonProject/servlet/JsonAction";
	
	private static final String TAG = "MAIN";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		person = (Button) findViewById(R.id.person);
		persons = (Button) findViewById(R.id.persons);
		liststring = (Button) findViewById(R.id.liststring);
		listmap = (Button) findViewById(R.id.listmap);
		
		person.setOnClickListener(this);
		persons.setOnClickListener(this);
		liststring.setOnClickListener(this);
		listmap.setOnClickListener(this);
	}

	@Override
	public void onClick(View v) {
		switch (v.getId()) {
		case R.id.person:

			String tempPath = path;
			tempPath += "?action_flag=person";
			String jsonString = HttpUtils.getJsonContent(tempPath);
			Person person = JsonTools.getPerson("person", jsonString);
			Log.i(TAG, person.toString());
			
			Toast.makeText(this, person.toString(), 1).show();
			
			break;

		case R.id.persons:
			
			tempPath = path;
			tempPath += "?action_flag=persons";
			jsonString = HttpUtils.getJsonContent(tempPath);
			List<Person> list = JsonTools.getPersons("persons", jsonString);
			Log.i(TAG, list.toString());
			
			Toast.makeText(this, list.toString(), 1).show();
			
			break;
		case R.id.liststring:

			tempPath = path;
			tempPath += "?action_flag=liststring";
			jsonString = HttpUtils.getJsonContent(tempPath);
			List<String> list1 = JsonTools.getList("liststring", jsonString);
			Log.i(TAG, list1.toString());
			
			Toast.makeText(this, list1.toString(), 1).show();
			
			break;

		case R.id.listmap:

			tempPath = path;
			tempPath += "?action_flag=listmap";
			jsonString = HttpUtils.getJsonContent(tempPath);
			List<Map<String,Object>> list4 = JsonTools.listKeyMaps("listmap", jsonString);
			Log.i(TAG, list4.toString());
			
			Toast.makeText(this, list4.toString(), 1).show();
			
			break;
		default:
			break;
		}
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}

}


3)HttpUtils

package com.njupt.android_json;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpUtils {

	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) {
			e.printStackTrace();
		}
		
		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(Exception e){
			e.printStackTrace();
		}
		return jsonString;
	}
}


4)Person

package com.njupt.pojo;

public class Person {
	private int id;
	private String name;
	private String address;
	
	public Person() {
		// TODO Auto-generated constructor stub
	}

	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 "Person [address=" + address + ", id=" + id + ", name=" + name
				+ "]";
	}
	
	
}

5)JsonTools

package com.njupt.tools;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONObject;

import com.njupt.pojo.Person;

/**
 * 客户端的JsonTools主要用来解析JSON
 * @author Administrator
 *
 */
public class JsonTools {

	public JsonTools() {
		// TODO Auto-generated constructor stub
	}
	
	
	public static Person getPerson(String key,String jsonString){
		Person person = new Person();
		
		try{
			/**
			 * 解析就是一个person的情况
			 * {"person":{"address":"beijing","id":1001,"name":"jack"}}
			 */
			JSONObject jsonObject = new JSONObject(jsonString);//获得的是: {"person":{"address":"beijing","id":1001,"name":"jack"}}
			JSONObject personObject = jsonObject.getJSONObject(key);//获得的是: {"address":"beijing","id":1001,"name":"jack"}
			
			person.setId(personObject.getInt("id"));
			person.setName(personObject.getString("name"));
			person.setAddress(personObject.getString("address"));
		}catch(Exception e){
			
		}
		
		return person;
	}
	
	
	/**
	 * 解析List<Person>的情况
	 * {"persons":[{"address":"beijing","id":1003,"name":"huangjundong"},{"address":"guangdong","id":1004,"name":"zhangzetian"}]}
	 * @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);
			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){
			e.printStackTrace();
		}
		
		return list;
	}
	
	
	/**
	 * 解析List<String>的情况
	 * {"liststring":["beijing","shanghai","hunan"]}
	 * @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(Exception e){
			e.printStackTrace();
		}
		
		return list;
	}
	
	
	/**
	 * 解析List<Map>的情况
	 * {"listmap":[{"id":1001,"address":"beijing","name":"huangjundong"},{"id":1002,"address":"beijing","name":"zhangzetian"}]}
	 * @param key
	 * @param jsonString
	 * @return
	 */
	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 jsonKey = iterator.next();
					Object jsonValue = jsonObject2.get(jsonKey);
					
					if(jsonValue == null){
							jsonValue = "";
					}
					
					map.put(jsonKey, jsonValue);
				}
				
				list.add(map);
				
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return list;
	}
}


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

帅气的东哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值