解析JSON格式数据

来源:互联网 发布:淘宝有货到付款的产品 编辑:程序博客网 时间:2024/06/10 14:37


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


本讲内容:解析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 

1 0
原创粉丝点击