当前位置:   article > 正文

FastJson在Android中的使用_android fastjson

android fastjson

以前都是使用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 + '\'' +
                '}';
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

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 +
                '}';
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

Java对象转化为Json字符串

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);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

输出结果

{"id":0,"name":"admin","users":[{"address":"shanghai","id":2},{"address":"beijing","id":3}]}
  • 1

另外这个方法还有一个重载的方法可以格式化输出的json字符串。

JSON.toJSONString(Object object, boolean prettyFormat)

输出结果如下所示

这里写图片描述

Json字符串转化成Java对象

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);
  • 1
  • 2
  • 3

输出结果

 Group{id=0, name='admin', users=[User{id=2, address='guest'}, User{id=3, address='root'}]}
  • 1

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());
  • 1
  • 2
  • 3
  • 4

输出结果

User{id=24, address='Mack'}
  • 1

注意:json字符串转化成java对象字段不区分大小写 如下所示。

String json = "{\"id\":2,\"Address\":\"shanghai\"}";
        User user = JSON.parseObject(json, User.class);
        Log.e(TAG, user.getAddress());
  • 1
  • 2
  • 3

输出结果

shanghai
  • 1

即json字符串中的Address字段映射成了java对象中的address字段。

@JSONField注解的使用

1 作用于get方法上:当把注解作用于get方法上的时候,在把Java对象转化成Json字符串的时候,Java对象中的字段名会转化为注解中的name指定的字段名。

@JSONField(name = "myAddress")
    public String getAddress() {
        return address;
    }
  • 1
  • 2
  • 3
  • 4
  User guestUser = new User();
        guestUser.setId(2L);
        guestUser.setAddress("guangzhou");
        String json = JSON.toJSONString(guestUser);
        Log.e(TAG, json);
  • 1
  • 2
  • 3
  • 4
  • 5

输出结果

{"id":2,"myAddress":"guangzhou"}
  • 1

在上面的例子中,Java对象中的address字段,在生成的json字符串中的字段名是myAddress。

2 作用于set方法上:在把json字符串转化成java对象的时候,注解中的name指定的字段名会映射为Java对象中的字段名。

@JSONField(name = "add")
    public void setAddress(String address) {
        this.address = address;
    }
  • 1
  • 2
  • 3
  • 4
String json = "{\"id\":2,\"add\":\"shanghai\"}";
        User user = JSON.parseObject(json, User.class);
        Log.e(TAG, user.getAddress());
  • 1
  • 2
  • 3

输出结果

shanghai
  • 1

可以看到java对象中address字段被赋值为json字符串中addr所对应的值。

另外,如果服务器传递过来的json字符串,可能会有差异,传递过来User的address的字段可能是add,也可能是 address,还可能是 Addr,那么我们可以使用如下方式,兼容上面的情况。

@JSONField(name = "add",alternateNames = {"address","Addr"})
    public void setAddress(String address) {
        this.address = address;
    }
  • 1
  • 2
  • 3
  • 4

3 @JSONField作用于java类的字段上

@JSONField(name = "address", alternateNames = {"addr", "add"})
    private String address;
  • 1
  • 2
User guestUser = new User();
        guestUser.setId(2L);
        guestUser.setAddress("guangzhou");
        String json = JSON.toJSONString(guestUser);
        Log.e(TAG, json);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

当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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/木道寻08/article/detail/982423
推荐阅读
相关标签
  

闽ICP备14008679号