做Android开发避免不了的要解析数据,像json数据,xml数据等很多,今天就稍微了解一下关于json格式的数据解析。目前json数据在安卓开发中使用还是比较多的,它的优缺点在此咱们就不在讨论那么多了,我们主要是了解怎样获取json数据并很好的解析。
http://apicloud.mob.com/wx/article/category/query?key=15375df9cf9c3 数据接口地址
这就是一段json格式的数据,我们访问网络接口就能很直接的看到这些数据,但是这些数据现在看着还是毫无章华的,如果我们想要使用这些数据并封装成对象以便以以后的使用,肯定要对数据进行解析,为了方便解析我们肯定首先要知道json里面的数据内容和格式,还好网上提供了很多json在线解析的工具
先说一下整个流程(仅仅是我个人观点):
1、通过网络接口获取json数据
2、将json数据进行在线解析,了解其中的内容和格式
3、编写javabean,就是根据json数据和格式编写相应的java类
4、从网上利用工具(我们用的是OKhttp)获取数据,并用GSON工具等将数据封装成对象
5、然后就能展示获得数据
结下来我们就按照以上步骤进行数据的解析,首先我们通过接口获取数据
接口就是我在上面提供的接口
接下来就是讲整个数据内容进行复制,并放在相应的Json在线解析工具下,网上有很多的json在线解析的工具,我们直接百度即可,然后将数据继续整个粘贴,有些工具可以直接生成相对应的的java类,这里我仅仅列举出了一个bean,还有一个bean就不在这里列举了,你们自己试一下就知道了
public class JsonsRootBean {
private String msg;
private List
@JsonProperty("retCode")
private String retcode;
public void setMsg(String msg) {
this.msg = msg;
}
public String getMsg() {
return msg;
}
public void setResult(List
this.result = result;
}
public List
return result;
}
public void setRetcode(String retcode) {
this.retcode = retcode;
}
public String getRetcode() {
return retcode;
}
}
很多时候这些工具生成的数据是直接可用的,但是咱们还是要看一下数据类型和每个对象的大小写是否和咱们的数据内容一致,不一致的话很容易出现bug,这就是我们的javabean
然后就是进行OKhttp的解析了,使用OKhttp需要添加依赖,等下咱们还需要一个Gson工具,我们再次一并加入依赖
compile 'com.squareup.okhttp3:okhttp:3.4.1' compile 'com.google.code.gson:gson:2.8.1'
对于Androidstudio来说,依赖都是添加在build.gradle的dependencies下
接下来就是就是从网上获取数据代码如下
public class SendRequestJson { public SendRequestJson(final String url) { new Thread(new Runnable() { @Override public void run() { try { OkHttpClient client = new OkHttpClient(); Request request = new Request.Builder(). url("http://apicloud.mob.com/wx/article/category/query?key=15375df9cf9c3") .build(); Response response = client.newCall(request).execute(); String responseDate = response.body().string(); Log.i("", responseDate); showResponse(responseDate); } catch (IOException e) { e.printStackTrace(); } } }).start(); }
代码其实也不复杂,在这里我们使用的是OKhttp,网上还有很多的工具,这里我们只是了解一下关于json格式数据解析的过程,就不在这里做过多的阐述了,大家可以上网查一下,有关的资料有很多。走到这里我们只是获得了json数据,还并没有真正的进行解析下面才是关于json的解析
private void showResponse(String responseDate) { Gson gson = new Gson(); try { Bigbean bigbean = gson.fromJson(responseDate, Bigbean.class); Shortbean shortbean = (Shortbean) bigbean.getResult(); Log.d(" ", shortbean.getName()); } catch (Exception e) { e.printStackTrace(); } } }
在这里代码运行后我们会在控制台看到我们相应的Name,里面具体的解析方法我也不在多说了,红色的这个类即是我们之前定义的bean,大家应该都能理解,但是,如果要是解析集合数据的话是不一样的
给出一个范例,
JiheappList=gson.fromJson(responseDate, new TypeToken /* for(App app:appList){ Log.d("MainActivity","id is"+app.getMsg()); Log.d("MainActivity","id is"+app.getResult());>(){}.getType());
这是我原来写过的一串代码,只是一个展示并没有实际效果
关于json解析就先说这么多了,这都是我自己的理解,希望大家能帮我指出里面不对的地方,也希望对大家有点儿帮助
而且大家不要忘了给程序添加上网的权限