今天给大家讲讲Android中怎么利用fastJSON快速的将json格式的数据生成我们开发中需要的实体类。这是对Android客户端向服务端发送请求获取返回的json格式数据时,我们能够利用的快速的封装数据的方法(即生成实体类)。有了实体类之后,我们就可以做许多后续的开发,我们就可以随心所欲的将我们生成的实体类里面的数据尽情的呈现在页面上了。
那究竟什么是json格式的数据呢?
json概念很简单,json是一种轻量级的数据格式,它是基于javascript语法的子集,即数组和对象表示。由于使用的是javascript语法,因此json定义可以包含在javascript文件中,对其的访问无需通过基于XML的语言来额外解析。
JSON有两种表示结构,对象和数组。
对象结构以”{”大括号开始,以”}”大括号结束。中间部分由0或多个以”,”分隔的”key(关键字)/value(值)”对构成,关键字和值之间以”:”分隔,语法结构如下
{
key1:value1,
key2:value2,
}
其中关键字是字符串,而值可以是字符串,数值,true,false,null,对象或数组。
数组结构以”[”开始,”]”结束。中间由0或多个以”,”分隔的值列表组成,语法结构如下
[
{
key1:value1,
key2:value2
},
{
key3:value3,
key4:value4
}
]
当然以上的json数据很简单,获取对应的键值也很简单,但是当遇到JSONObject里面嵌套着JSONObject和JSONArray的时候就有点复杂了。
1)、如果此时再根据key值取value,我们可以认为这是一个字典。同样的功能实现,字典比实体更晦涩难懂,容易产生bug。
2)、每次都要手动从JSONObject或者JSONArray中取值,很繁琐。
接下来就可以使用fastJSON实现由json格式的数据到实体类的生成了。fastJSON的最新jar包在文章的末尾链接给出。要使用还需要在项目中添加对该jar包的引用,如下图所示:
直接将jar包复制粘贴到libs目录下即可。
假如现在你需要对如下所示的json数据快速的解析生成实体类:
{"stampList":[{"stampholder":"dd","stampname":"dd","stampid":"oa003","swjg_dm":"00000000011","stamptype":"1","xybz":1,"leader":"dd"},{"stampholder":"hh","stampname":"hh","stampid":"oa004","swjg_dm":"00000000011","stamptype":"4","xybz":1,"leader":"hh"}],"deptList":[{"sort":17,"remark":"测试","swjg_type":2,"sjswjg_dm":"00000000011","bizname":"测试","swjg_dm":"0000000001105","swjg_mc":"西安部门一","xybz":1},{"sort":18,"remark":"测试","swjg_type":2,"sjswjg_dm":"00000000011","bizname":"测试","swjg_dm":"0000000001106","swjg_mc":"西安部门二","xybz":1}]}
怎么样,看东西是不是有种喝酒喝多了的感觉。但是别怕,我们有实体类生成器!为什么要先生成实体类呢?这是因为我们使用fastJSON的解析json数据的时候需要自己根据json数据的字段自己先把实体类写好,比如写完后的实体类名称是YyspInfoEntity.class。那么生成利用fastJSON生成实体类就只需要一行代码:
// fastJson快速解析json数据生成实体类
YyspInfoEntity entity = JSON.parseObject(json.toString(),
YyspInfoEntity.class);
这样你的实体类就生成成功了。其中方法里面的json参数是你的发送网络请求后返回的json格式数据。在日志信息中打印如下所示:
成功的将从服务端获取的json数据打印了出来。这也就意味着实体类里面是有数据的,生成成功了。
那么接下来重点就是就是实体生成器的使用了。实体类生成器我在文章最后也有给出。下面来说说使用方法:
当使用实体编程的时候,相信大家都有一个切身感受,就是每次根据JSON字符串去编写一个实体的时候,那种感觉是醉醉的,很麻烦。不仅仅是Android,ios和WindowsPhone编程时,也需要把JSON转换为相应的实体。
所以创建实体是一件很麻烦的事情,我们需要一个工具,帮助我们自动生成不同开发平台下的实体。于是便有了EntityGenerator这个工具。就像马云说的那样,工具都是懒人发明的。所以发明一个能够自动生成实体的工具,提高开发的效率很有必要。于是我就到开源社区找到了一个可以生成Android、ios和WindowsPhone三中实体的工具。如下图所示:
将获得的json格式数据赋值粘贴到上面的文本框后,点击Load按钮,就会在右边的列表中预览到实体间的层次关系,以及JSON字符串中的字段与JSON实体中的属性之间的对应关系,如下图所示:
同时这个列表还是可以编辑的。我们可以灵活修改要生成的JSON实体的属性名称。点击Generate按钮,就会在C:\json目录下生成JSON实体了。如下所示:
MainClass内容如下:
// JSON Java Class Generator
// Written by Bruce Bao
// Used for API:
package MTObjectMapping;
import java.util.List;
public class MainClass {
private List<StampList> stampList;
private List<DeptList> deptList;
public List<StampList> getStampList() {
return stampList;
}
public void setStampList(List<StampList> stampList) {
this.stampList = stampList;
}
public List<DeptList> getDeptList() {
return deptList;
}
public void setDeptList(List<DeptList> deptList) {
this.deptList = deptList;
}
}
DeptList的内容如下:
// JSON Java Class Generator
// Written by Bruce Bao
// Used for API:
package MTObjectMapping;
import java.util.List;
public class DeptList {
private int sort;
private String remark;
private int swjg_type;
private String sjswjg_dm;
private String bizname;
private String swjg_dm;
private String swjg_mc;
private int xybz;
public int getSort() {
return sort;
}
public void setSort(int sort) {
this.sort = sort;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
public int getSwjgType() {
return swjg_type;
}
public void setSwjgType(int swjg_type) {
this.swjg_type = swjg_type;
}
public String getSjswjgDm() {
return sjswjg_dm;
}
public void setSjswjgDm(String sjswjg_dm) {
this.sjswjg_dm = sjswjg_dm;
}
public String getBizname() {
return bizname;
}
public void setBizname(String bizname) {
this.bizname = bizname;
}
public String getSwjgDm() {
return swjg_dm;
}
public void setSwjgDm(String swjg_dm) {
this.swjg_dm = swjg_dm;
}
public String getSwjgMc() {
return swjg_mc;
}
public void setSwjgMc(String swjg_mc) {
this.swjg_mc = swjg_mc;
}
public int getXybz() {
return xybz;
}
public void setXybz(int xybz) {
this.xybz = xybz;
}
}
StampList的内容如下:
// JSON Java Class Generator
// Written by Bruce Bao
// Used for API:
package MTObjectMapping;
import java.util.List;
public class StampList {
private String stampholder;
private String stampname;
private String stampid;
private String swjg_dm;
private String stamptype;
private int xybz;
private String leader;
public String getStampholder() {
return stampholder;
}
public void setStampholder(String stampholder) {
this.stampholder = stampholder;
}
public String getStampname() {
return stampname;
}
public void setStampname(String stampname) {
this.stampname = stampname;
}
public String getStampid() {
return stampid;
}
public void setStampid(String stampid) {
this.stampid = stampid;
}
public String getSwjgDm() {
return swjg_dm;
}
public void setSwjgDm(String swjg_dm) {
this.swjg_dm = swjg_dm;
}
public String getStamptype() {
return stamptype;
}
public void setStamptype(String stamptype) {
this.stamptype = stamptype;
}
public int getXybz() {
return xybz;
}
public void setXybz(int xybz) {
this.xybz = xybz;
}
public String getLeader() {
return leader;
}
public void setLeader(String leader) {
this.leader = leader;
}
}
大家发现了没有,生成的实体类都没有构造方法,所以我们需要自己手动添加构造方法,这点很重要别忘记了。最好也添加toString()方法,这样方便进行一些日志信息的打印。
以上就是实体生成器的用法,很简单实用。
当你下载好实体生成器的压缩包后,直接解压即可使用,有个缺点就是需要在Windows系统上使用。如果你是搞ios开发的,就要切换系统了。
假设你解压到了桌面上,直接打开如下的路径:
C:\Users\Administrator\Desktop\EntityGenerator\EntityGenerator\EntityGenerator(Winform)\bin\Debug
如下所示,运行第一个.exe文件即可:
好了,就说到这里了。下面给出下载的链接: