码迷,mamicode.com
首页 > Web开发 > 详细

解析JSON格式数据

时间:2015-06-18 22:21:29      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:



别想一下造出大海,必须先由小河川开始。


本讲内容:解析JSON格式数据

1)比起XML,JSON的主要优势在于它的体积更小,在网络上传输的时候可以更省流量。但缺点在于,它的语义性较差,看起来不如XML直观。

2)解析JSON格式的数据有多种方式,常用的两种是:使用官方提供的JSONObject和谷歌的开源库GSON。


示例一:解析服务器返回的数据

技术分享

一、JSONObject解析方式

步骤:

1、在服务器中定义一个JSONArray,并将服务器返回的数据传入到JSONArray对象中

2、循环遍历这个JSONArray,从中取出和每一个元素都是一个JSONObject对象,每个JSONObject对象中又会包含id、name、和version这些数据

3、调用getString()方法将这些数据取出。


下面是MainActivity.java主界面文件:

public class MainActivity extends Activity implements OnClickListener {
	private Button sendRequest;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sendRequest = (Button) findViewById(R.id.id_send);
		sendRequest.setOnClickListener(this);
	}

	public void onClick(View v) {
		if (v.getId() == R.id.id_send) {
			sendRequestWithHttpClient();
		}
	}

	/**
	 * 使用HttpClient发送HTTP请求
	 */
	private void sendRequestWithHttpClient() {
		// 开启线程来发起网络请求
		new Thread(new Runnable() {
			public void run() {
				try {
					HttpClient httpClient = new DefaultHttpClient();// 创建一个DefaultHttpClient实例
					// 指定访问的服务器地址是电脑本机,10.0.2.2对于模拟器来说就是电脑本机的IP地址
					HttpGet httpGet = new HttpGet("http://10.0.2.2/get_data.json");
					HttpResponse httpResponse = httpClient.execute(httpGet);
					if (httpResponse.getStatusLine().getStatusCode() == 200) {
						// 请求和响应都成功了
						HttpEntity entity = httpResponse.getEntity();// 获取一个HttpEntity实例,取出服务器返回的具体内容
						String response = EntityUtils.toString(entity, "utf-8");// 不写utf-8会出现乱码
						parseJSONWithSAX(response);//通过JSONObject解析服务器返回的数据
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}).start();
		;
	}

	/**
	 * 通过JSONObject解析
	 */
	private void parseJSONWithSAX(String jsonData) {
		try {
			JSONArray jsonArray=new JSONArray(jsonData);
			for(int i=0;i<jsonArray.length();i++){
				JSONObject jsonObject=jsonArray.getJSONObject(i);
				String id=jsonObject.getString("id");
				String name=jsonObject.getString("name");
				String version=jsonObject.getString("version");
				Log.d("MainActivity", "id is "+id);
				Log.d("MainActivity", "name is "+name);
				Log.d("MainActivity", "version is "+version);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

运行程序并点击按钮

技术分享 技术分享


二、GSON解析方式

由于GSON并没有添加到Android官方的API中,因此如果想要使用这个功能必须要在项目中添加一个GSON的Jar包。

步骤:

1、定义一个类(编写字段)

2、借助TypeToken将期望解析成的数据类型传入到fromJson()方法中

List<App> appList=gson.fromJson(jsonData, new TypeToken<List<App>>() {}.getType());


下面是App.java文件:

public class App {
	private String id;
	private String name;
	private String version;

	public String getId() {
		return id;
	}

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

	public String getName() {
		return name;
	}

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

	public String getVersion() {
		return version;
	}

	public void setVersion(String version) {
		this.version = version;
	}

}

下面是MainActivity.java主界面文件:

public class MainActivity extends Activity implements OnClickListener {
	private Button sendRequest;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		sendRequest = (Button) findViewById(R.id.id_send);
		sendRequest.setOnClickListener(this);
	}

	public void onClick(View v) {
		if (v.getId() == R.id.id_send) {
			sendRequestWithHttpClient();
		}
	}

	/**
	 * 使用HttpClient发送HTTP请求
	 */
	private void sendRequestWithHttpClient() {
		// 开启线程来发起网络请求
		new Thread(new Runnable() {
			public void run() {
				try {
					HttpClient httpClient = new DefaultHttpClient();// 创建一个DefaultHttpClient实例
					// 指定访问的服务器地址是电脑本机,10.0.2.2对于模拟器来说就是电脑本机的IP地址
					HttpGet httpGet = new HttpGet("http://10.0.2.2/get_data.json");
					HttpResponse httpResponse = httpClient.execute(httpGet);
					if (httpResponse.getStatusLine().getStatusCode() == 200) {
						// 请求和响应都成功了
						HttpEntity entity = httpResponse.getEntity();// 获取一个HttpEntity实例,取出服务器返回的具体内容
						String response = EntityUtils.toString(entity, "utf-8");// 不写utf-8会出现乱码
						parseJSONWithGSON(response);//通过GSON解析服务器返回的数据
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}).start();
		;
	}

	/**
	 * 通过JSONObject解析
	 */
	private void parseJSONWithGSON(String jsonData) {
		try {
			Gson gson=new Gson();
			List<App> appList=gson.fromJson(jsonData, new TypeToken<List<App>>() {}.getType());
			for (App app : appList) {
				Log.d("MainActivity", "id is "+app.getId());
				Log.d("MainActivity", "name is "+app.getName());
				Log.d("MainActivity", "version is "+app.getVersion());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

运行程序并点击按钮

技术分享



Take your time and enjoy it 

解析JSON格式数据

标签:

原文地址:http://blog.csdn.net/liguojin1230/article/details/46550263

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!