Android 之json解析
json简介
json是我们在网络传输中经常用到的数据类型之一。那么什么是json呢?
json 全名JavaScript Object Notation。他是存储和交换文本信息的语法。他比XML更小,更快,更容易解析
下面将介绍三种json解析的方式,分别是使用jsonObject,Gson和fastjson方式。
使用jsonObject解析
使用步骤
1. 获取json的字符串。
2. 获取jsonArray数组
3. 对里面的对象逐个解析
private void parasJSONWithJSONObject(String jsonData) {
try{
// 获取jsonArray数组
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");
Log.d("ok","id is" + id);
Log.d("ok","name is " + name);
}
} catch (Exception e){
e.printStackTrace();
}
}
使用Gson解析
Gson是google提供的一个开源库,功能很强大。不过这个库没有被添加到Android官方的API中。
所以在进行json解析之前首先我们先添加Gson的开源包。
下载地址为http://download.csdn.net/download/qq_32763643/9898639。
Gson的仓库地址为https://github.com/google/gson
使用步骤
1. 获取json字符串
2. 获取Gson对象
3. 通过TypeToken来获取泛型数据类型,再转化成泛型list
4. 对里面的对象进行解析
private void parasJSONWithGSON(String jsonData) {
// 创建gson对象
Gson gson = new Gson();
// 通过TypeToken来获取泛型数据类型,再转化成list
List<Person> persons = gson.fromJson(jsonData,new TypeToken<List<Person>>(){ }.getType());
for (Person person : persons) {
Log.d("ok","id is "+ person.getId());
Log.d("ok","name is "+ person.getName());
}
}
使用fastjson解析
fastjson是目前阿里巴巴进行的一个开源项目,他功能十分强大,并且使用方法很简单。同样也需要添加包。他的速度比之前的两种方法的速度都要快上许多(大约比gson快六倍)。有兴趣的小伙伴可以去了解下。
资源包下载地址为http://download.csdn.net/download/qq_32763643/9898606
仓库地址为https://github.com/alibaba/fastjson。
这里简单的使用了fastjson。为了和上面统一。我们传入的还是还是json的字符串
使用步骤
1. 获取json字符串
2. 将字符串直接转化成泛型list
3. 对里面对象逐个解析
private void parasJSONWithFastjson(String jsonData) {
List<Person> persons = JSON.parseArray(jsonData,Person.class);
for (Person person : persons) {
Log.d("ok","id is "+ person.getId());
Log.d("ok","name is "+ person.getName());
}
}
json文件为
[{"id":"5","name":"pf"},
{"id":"6","name":"dm"}]
下面是传入参数的方法
private void sendRequsetWithHttpURLConnection() {
// 开启线程发起网络请求
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
String path = "http://10.0.2.2/get_data.json";
try{
URL url = new URL(path);
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
StringBuilder iresponse = new StringBuilder();
String line;
while ((line = reader.readLine()) != null){
iresponse.append(line);
}
String response = iresponse.toString();
// 这里使用fastjson的方法
parasJSONWithFastjson(response);
} catch (Exception e){
e.printStackTrace();
} finally {
if(connection != null){
connection.disconnect();
}
}
}
}).start();
}