该文章仅做自己日后参考,复习用。
需要引的包:flexjson-2.1.jar
划水一个月开始做了点公司的项目,实现一个接口,实现将json数据转为javabean。公司用的是flexjson,于是去网上查了资料,关于flexjson将json转为javabean的太少(可能我要的方式少了)只找到一篇案例,做了发现那个案例中有一些错误,调了半天,后来在项目经理的指导下写过。
上案例:
一
public static UserData toBean(String JsonStr){
UserData data=null;
try {
data = new JSONDeserializer<UserData>().deserialize(JsonStr
} catch (Exception e) {
e.printStackTrace();
}
return data;
}
这个是将一个json数据转为一个UserData的对象json是{"id":42,"cityCode":“557”}这种格式。
二:
public static List<UserData> toListBean(String str){
List<UserData> list = null;
try {
list = new JSONDeserializer<List<UserData>>().use("userinfo",ArrayList.class).use("values", UserData.class).deserialize(str);
} catch (Exception e) {
e.printStackTrace();
}
return list;
}
这个是将json数据转为List<UserData>的形式,传入的是json数组[{“id”:42,"city":"557"},{“id”:42,"city":"557"}]
三:
public class JSONInfo<T> {
private int errCode;
private String errMsg;
private List<T> userinfo;
private Long updateTime;
public int getErrCode() {
return errCode;
}
public void setErrCode(int errCode) {
this.errCode = errCode;
}
public String getErrMsg() {
return errMsg;
}
public void setErrMsg(String errMsg) {
this.errMsg = errMsg;
}
public Long getUpdateTime() {
return updateTime;
}
public void setUpdateTime(Long updateTime) {
this.updateTime = updateTime;
}
public List<T> getUserinfo() {
return userinfo;
}
public void setUserinfo(List<T> userinfo) {
this.userinfo = userinfo;
}
}
这个是嵌套json要用到的bean对象,具体看网上找到的那个,但是网上找到的一个他的承载json的字段是T 类型的,之前在写的时候怎么也调不通,后来项目经理来改成了List<T>就可以了(debug时其他字段都是有值唯独中间的获取不到)json格式是:{\"errCode\":0,\"errMsg\":\"成功\", \"userinfo\":[{\"id\":42,\"cityCode\":\"577\",\"userCode\":\"12312345\",\"userName\":\"1234\",\"userType\":\"1\",\"operateTime\":1447839916000,\"operateType\":1},{\"id\":44,\"cityCode\":\"577\",\"userCode\":\"12312345\",\"userName\":\"1234\",\"userType\":\"1\"}] ,\"updateTime\":147988147631}(中间用空格隔了一点方便查看格式)
public static JSONInfo<List<UserData>> toBean2(String JsonStr){
JSONInfo<List<UserData>> info = null;
try {
info = new JSONDeserializer<JSONInfo<List<UserData>>>()
.use("userinfo", ArrayList.class).use("userinfo.values", UserData.class)
.deserialize(JsonStr,JSONInfo.class);
} catch (Exception e) {
e.printStackTrace();
}
return info;
}
但是这样用到的是反射的形式,有很大的局限性,也就是说,use("userinfo", ArrayList.class)这语句里面你的String是要和JSONInfo里的字段是一致的JSOInfo里面要有get和set方法。这样没写一个bean都要有一个对应的JSONInfo。于是有下面的
四:
//测试List的
public static void getMM(String json){
try {
int i =0;
System.out.println(i);
List<BerthData> list = null;
// Object obj = new JSONDeserializer().deserialize(json);
// Map map = (Map) new JSONDeserializer().deserialize(json);
// List list = (List) map.get("userinfo");
// String str = list.get(0).toString();
// List list = (List) new JSONDeserializer().deserialize(json,ArrayList.class);
// Object obj = list.get(0);
// System.out.println(obj);
} catch (Exception e) {
e.printStackTrace();
}
}
//测试类
public static void getDataBean(String jsonStr){
try {
BerthData userData = BerthData.gertBerthData(jsonStr);
System.out.println(userData);
} catch (Exception e) {
e.printStackTrace();
}
}
//测试map
public static void getMap(String jsonStr){
try {
Map map = BaseData.getMap(jsonStr);
System.out.println(map);
} catch (Exception e) {
e.printStackTrace();
}
}
flexjson是可以通过直接 new JSONDeserializer().deserialize(json) 这样来取的,返回的对象你直接定义,得到的是一个HashMap,你可以通过get(key)来获取到数据,获取嵌套模式时,通过get("userinfo")来获取到一个LIst集合,而list集合里面存储的是键值对,也是Map的形式可以获取,然后在吧获取到的值通过bean的set方法添加到具体的类里面,这样十分的灵活,如下面的类里面的方法:
public static List<UserData> getUserDataList(String json){
List<UserData> userDatas = new ArrayList<UserData>();
List list = (List) deserializer.deserialize(json,ArrayList.class);
for(int i=0;i<list.size();i++){
UserData userData = new UserData();
Map map = (Map) list.get(i);
userData.setId((Long.valueOf(map.get("id")+"")) );
userData.setCityCode((String) map.get("cityCode"));
userData.setUserCode((String) map.get("userCode"));
userData.setUserName((String) map.get("userName"));
userData.setUserType((String) map.get("userType"));
userData.setOperateType((int) map.get("operateType"));
userData.setOperateTime((Long.valueOf(map.get("operateTime")+"")) );
userDatas.add(userData);
System.out.println(userData);
}
return userDatas;
}
public static UserData gertUserData(String json){
UserData userData = new UserData();
Map map = (Map) deserializer.deserialize(json,Map.class);
userData.setId((Long.valueOf(map.get("id")+"")));
userData.setCityCode((String) map.get("cityCode"));
userData.setUserCode((String) map.get("userCode"));
userData.setUserName((String) map.get("userName"));
userData.setUserType((String) map.get("userType"));
userData.setOperateType((int) map.get("operateType"));
userData.setOperateTime((Long.valueOf(map.get("operateTime")+"")));
return userData;
}
base类里面:
public class BaseData {
protected static JSONDeserializer deserializer = new JSONDeserializer();
public static Map getMap(String json){
Map map = (Map) deserializer.deserialize(json,Map.class);
return map;
}
}