赞
踩
以前都是使用Gson,从来没使用过FastJson。今天偶尔在一个项目中看到,就简单了解一下。
先交代使用到的两个类
User类
public class User {
private Long id;
private String address;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", address='" + address + '\'' +
'}';
}
}

Group类
public class Group {
private Long id;
private String name;
private List<User> users = new ArrayList<User>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<User> getUsers() {
return users;
}
public void setUsers(List<User> users) {
this.users = users;
}
public void addUser(User user) {
users.add(user);
}
@Override
public String toString() {
return "Group{" +
"id=" + id +
", name='" + name + '\'' +
", users=" + users +
'}';
}
}

JSON.toJSONString(Object object)
Group group = new Group();
group.setId(0L);
group.setName("admin");
User guestUser = new User();
guestUser.setId(2L);
guestUser.setAddress("shanghai");
User rootUser = new User();
rootUser.setId(3L);
rootUser.setAddress("beijing");
group.addUser(guestUser);
group.addUser(rootUser);
String jsonString = JSON.toJSONString(group);
Log.e(TAG, "simpleEncode: " + jsonString);

输出结果
{"id":0,"name":"admin","users":[{"address":"shanghai","id":2},{"address":"beijing","id":3}]}
另外这个方法还有一个重载的方法可以格式化输出的json字符串。
JSON.toJSONString(Object object, boolean prettyFormat)
输出结果如下所示
JSON.parseObject(String text, Class clazz)
String json = "{\"id\":0,\"name\":\"admin\",\"users\":[{\"id\":2,\"address\":\"guest\"},{\"id\":3,\"address\":\"root\"}]}";
Group group = JSON.parseObject(json, Group.class);
Log.e(TAG, "simpleDecode: " + group);
输出结果
Group{id=0, name='admin', users=[User{id=2, address='guest'}, User{id=3, address='root'}]}
JSON.parseObject(String text, TypeReference type, Feature… features)
String genericJson = "{\"user\":{\"address\":\"Beijing\",\"id\":24}}";
Map<String, User> map = JSON.parseObject(genericJson, new TypeReference<Map<String, User>>() {
});
Log.e(TAG, map.get("user").toString());
输出结果
User{id=24, address='Mack'}
注意:json字符串转化成java对象字段不区分大小写 如下所示。
String json = "{\"id\":2,\"Address\":\"shanghai\"}";
User user = JSON.parseObject(json, User.class);
Log.e(TAG, user.getAddress());
输出结果
shanghai
即json字符串中的Address字段映射成了java对象中的address字段。
1 作用于get方法上:当把注解作用于get方法上的时候,在把Java对象转化成Json字符串的时候,Java对象中的字段名会转化为注解中的name指定的字段名。
@JSONField(name = "myAddress")
public String getAddress() {
return address;
}
User guestUser = new User();
guestUser.setId(2L);
guestUser.setAddress("guangzhou");
String json = JSON.toJSONString(guestUser);
Log.e(TAG, json);
输出结果
{"id":2,"myAddress":"guangzhou"}
在上面的例子中,Java对象中的address字段,在生成的json字符串中的字段名是myAddress。
2 作用于set方法上:在把json字符串转化成java对象的时候,注解中的name指定的字段名会映射为Java对象中的字段名。
@JSONField(name = "add")
public void setAddress(String address) {
this.address = address;
}
String json = "{\"id\":2,\"add\":\"shanghai\"}";
User user = JSON.parseObject(json, User.class);
Log.e(TAG, user.getAddress());
输出结果
shanghai
可以看到java对象中address字段被赋值为json字符串中addr所对应的值。
另外,如果服务器传递过来的json字符串,可能会有差异,传递过来User的address的字段可能是add,也可能是 address,还可能是 Addr,那么我们可以使用如下方式,兼容上面的情况。
@JSONField(name = "add",alternateNames = {"address","Addr"})
public void setAddress(String address) {
this.address = address;
}
3 @JSONField作用于java类的字段上
@JSONField(name = "address", alternateNames = {"addr", "add"})
private String address;
User guestUser = new User();
guestUser.setId(2L);
guestUser.setAddress("guangzhou");
String json = JSON.toJSONString(guestUser);
Log.e(TAG, json);
当java对象转化成json字符串的时候,address字段映射成address。当json字符串转化为java对象的时候,address,addr,add都可以映射为java类的address字段。
参考链接
【1】http://blog.csdn.net/u011425751/article/details/51219242
【2】http://blog.csdn.net/shulianghan/article/details/41011605
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。