• fastjson知多少


    fastjson介绍

    fastjson是一个Java库,用来在Java对象和JSON之间相互转换。

    fastjson的目标(官方原话):

    我翻译一下:

    • 性能非常好;

    • 封装非常高;

    • 转换非常强;

    • 泛型也支持;

    • 自定义表示;

    • 复杂也支持;

    这6个目标,书读少的我理解起来费劲,看着这些字,视线开始模糊...突然这些字动了,不断变幻,凝聚成了两个字:“牛逼”。阿里巴巴也确实做到了,fastjson(24.9k star)作为国产原创库,PK掉了jackson(7.6k star)和gson(21.3k star),在国内应用领域坐上了头把交椅。

    安装fastsjon

    Maven引入:

    1. <dependency>
    2. <groupId>com.alibabagroupId>
    3. <artifactId>fastjsonartifactId>
    4. <version>VERSION_CODEversion>
    5. dependency>

    版本可以在 https://mvnrepository.com/artifact/com.alibaba/fastjson 查找:

    虽然2.0.x版本出来了,但是使用得多的还是1.2.x版本。至少得1.2.48以上,因为这以下的版本之前出过轰动全国的安全漏洞。

    入门示例

    Group.java

    1. public class Group {
    2. private Long id;
    3. private String name;
    4. private List users = new ArrayList();
    5. public Long getId() {
    6. return id;
    7. }
    8. public void setId(Long id) {
    9. this.id = id;
    10. }
    11. public String getName() {
    12. return name;
    13. }
    14. public void setName(String name) {
    15. this.name = name;
    16. }
    17. public List getUsers() {
    18. return users;
    19. }
    20. public void setUsers(List users) {
    21. this.users = users;
    22. }
    23. public void addUser(User user) {
    24. users.add(user);
    25. }
    26. }

    User.java

    1. public class User {
    2. private Long id;
    3. private String name;
    4. public Long getId() {
    5. return id;
    6. }
    7. public void setId(Long id) {
    8. this.id = id;
    9. }
    10. public String getName() {
    11. return name;
    12. }
    13. public void setName(String name) {
    14. this.name = name;
    15. }
    16. }

    编码,Java对象转换为JSON:

    1. import com.alibaba.fastjson.JSON;
    2. Group group = new Group();
    3. group.setId(0L);
    4. group.setName("admin");
    5. User guestUser = new User();
    6. guestUser.setId(2L);
    7. guestUser.setName("guest");
    8. User rootUser = new User();
    9. rootUser.setId(3L);
    10. rootUser.setName("root");
    11. group.addUser(guestUser);
    12. group.addUser(rootUser);
    13. // toJSONString方法
    14. String jsonString = JSON.toJSONString(group);
    15. System.out.println(jsonString);

    输出:

    {"id":0,"name":"admin","users":[{"id":2,"name":"guest"},{"id":3,"name":"root"}]}

    解码,JSON转换为Java对象:

    1. String jsonString = ...;
    2. // parseObject方法
    3. Group group = JSON.parseObject(jsonString, Group.class);

    fastjson封装了JSON类的toJSONString()parseObject()方法,来实现Java对象和JSON之间相互转换。

    在JSON转换为Java对象时,传入的String可以写在单行:

    String jsonString = "{\"id\":0,\"name\":\"admin\",\"users\":[{\"id\":2,\"name\":\"guest\"},{\"id\":3,\"name\":\"root\"}]}";

    也可以格式化后复制粘贴为多行:

    1. String jsonString = "{\n" +
    2. " \"id\":0,\n" +
    3. " \"name\":\"admin\",\n" +
    4. " \"users\":[\n" +
    5. " {\n" +
    6. " \"id\":2,\n" +
    7. " \"name\":\"guest\"\n" +
    8. " },\n" +
    9. " {\n" +
    10. " \"id\":3,\n" +
    11. " \"name\":\"root\"\n" +
    12. " }\n" +
    13. " ]\n" +
    14. "}";

    单行和多行都能够转换成功

    字符串转JSON提取数据

    除了Java对象和JSON相互转换以外,还有个对于测试来说,更为常见的使用场景:把字符串转为JSON,提取其中某些字段的数据。

    这也很简单,parseObject()方法不传第二个参数,返回的就是一个JSONObject对象:

    1. String jsonString = ...;
    2. // parseObject方法
    3. JSONObject jsonObj = JSON.parseObject(jsonString);

    JSONObject提供了一系列不同数据类型的get()方法来提取数据:

    对号入座提取想要的数据就可以了。

    参考资料:

    fastjson源码 https://github.com/alibaba/fastjson

    fastjson详解 https://blog.csdn.net/cold___play/article/details/124525519

  • 相关阅读:
    vue-cil之elementui、vuex(任务管理器)
    STM32
    docker从入门到熟悉
    经典文献阅读之--Online Map Vectorization for Autonomous Driving:(基于栅格化的在线地图矢量化)
    Windows网络系统架构
    Java基础知识(知识点)二
    【随想录】-【8 回溯算法】【组合问题】40 组合总和Ⅱ
    华为:手机王者归来,汽车起死回生
    书客护眼台灯好用吗?书客、柏曼、飞利浦多维度测评
    【动画进阶】极具创意的鼠标交互动画
  • 原文地址:https://blog.csdn.net/weixin_45741835/article/details/126671228