Adroid开发之解析Json数据格式
2015-12-15 15:12
656 查看
前言
相比较 XML,JSON 的主要优势在于它的体积更小,在网络上传输的时候可以更省流量。但缺点在于,它的语义性较差,看起来不如 XML 直观。各有所长,这篇主要学习如何解析json,常用的解析方式有
JSONObject (*)
GSON (*)
Jackson
FastJson
…
这里我们主要来学习一下前两种方式。
同样的,在服务器新建一个get_data.json文件。内容格式如下:
通过JSONObject
@Override public void onClick(View v) { switch (v.getId()) { case R.id.send_req: sendRequestWithHttpClient(); break; default: break; } } // The code that request is Success private static final int REQUEST_SUCCESS = 200; // Encoding format private static final String UTF_8 = "UTF-8"; /** * HttpClient * * The HttpClient was supported by Apache * */ private void sendRequestWithHttpClient() { new Thread(new Runnable() { @Override public void run() { // this is a GET request try { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("http://127.0.0.1/get_data.json"); HttpResponse httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == REQUEST_SUCCESS) { HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity, UTF_8); // Parse json data by JSONObject method parseJSONWithJSONObject(response); } } catch (Exception e) { e.printStackTrace(); } } }).start(); } /** * 通过JSONObject来解析json数据 * * @param jsonData */ private void parseJSONWithJSONObject(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的jar包到libs文件夹中:GSON库有何神奇之处?
GSON可以将一段JSON格式的字符串自动映射成一个对象,从而不需要我们再手动去编写代码进行解析了.
比如说一段 JSON 格式的数据如下所示:
{"name":"Tom","age":20}
那我们就可以定义一个 Person 类,并加入 name 和 age 这两个字段,然后只需简单地调用如下代码就可以将 JSON 数据自动解析成一个 Person 对象了:
Gson gson = new Gson(); Person person = gson.fromJson(jsonData, Person.class);
如果需要解析的是一段 JSON 数组会稍微麻烦一点,我们需要借助 TypeToken 将期望解析成的数据类型传入到 fromJson()方法中,如下所示:
List<Person> people = gson.fromJson(jsonData, new TypeToken<List<Person>>() {}.getType());
接下来,我们来解析服务器上的get_data.json,新建个app类:
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
/** * HttpClient * * The HttpClient was supported by Apache * */ private void sendRequestWithHttpClient() { new Thread(new Runnable() { @Override public void run() { // this is a GET request try { HttpClient httpClient = new DefaultHttpClient(); HttpGet httpGet = new HttpGet("http://127.0.0.1/get_data.json"); HttpResponse httpResponse = httpClient.execute(httpGet); if (httpResponse.getStatusLine().getStatusCode() == REQUEST_SUCCESS) { HttpEntity entity = httpResponse.getEntity(); String response = EntityUtils.toString(entity, UTF_8); // Parse json data by Gson method parseJSONWithGson(response); } } catch (Exception e) { e.printStackTrace(); } } }).start(); } /** * 通过Gson来解析json数据 * * @param jsonData */ private void parseJSONWithGson(String jsonData) { Gson gson = new Gson(); List<App> appList = gson.fromJson(jsonData, new TypeToken<List<App>>(){}.getType()); for (App app : appList) { Log.d("MainActivity", app.getId()); Log.d("MainActivity", app.getName()); Log.d("MainActivity", app.getVersion()); } }
相关文章推荐
- Ext JS权威指南
- js----验证码
- Google Map JavaScript API V3 实例大全
- JavaScript笔记
- JavaScript 静态方法和实例方法
- js checkbox获取选中的值
- firedac的数据序列和还原单元(Data.FireDACJSONReflect.pas)之字符串序列和还原
- 【层级结构】Ext.js5 视图模型的内部
- 前后台彻底分离的核心文件bridge.js.
- js中数组的使用
- firedac的数据序列和还原单元(Data.FireDACJSONReflect.pas)之拷贝FIREDAC数据集
- 转 JavaScript 获取鼠标点击位置坐标
- JavaScript组件开发完整示例
- js判断输入字符串长度(汉字算两个字符,字母数字算一个)
- JavaScript我的常用函数库
- JavaScript我的常用函数库
- jsp 关于导出excel 自动转换 科学计数法 显示的问题
- JS--简易心形
- Json对象与Json字符串互转
- 【Javascript】什么是事件