测试-FastJSON和Jackson-JSON库

文章目录

FastJSON

直接读代码:

java 复制代码
@Log4j2
public class FastJsonTest {

    @Test
    public void test1() {
        // JSON转对象-parseObject
        String jsonString = "{\"name\":\"张三\",\"age\":18}";
        Student student = JSON.parseObject(jsonString, Student.class);
        log.info(JSON.toJSONString(student));
    }

    @Test
    public void test2() {
        // json转list-parseArray
        String jsonString = "[{\"name\":\"张三\",\"age\":18},{\"name\":\"李四\",\"age\":19}]";
        List<Student> students = JSON.parseArray(jsonString, Student.class);
        for (Student student : students) {
            log.info(JSON.toJSONString(student));
        }
    }

    @Test
    public void test3() {
        // 对象转JSON
        Student student = new Student();
        student.setName("Gjkt");
        student.setAge(3);
        log.info(JSON.toJSONString(student));
    }

    @Test
    public void test4() {
        // list转JSON
        List<Student> list = new ArrayList<>();
        Student student1 = new Student();
        Student student2 = new Student();
        student1.setName("张三");
        student2.setName("李四");
        student1.setAge(3);
        student2.setAge(6);
        Collections.addAll(list, student1, student2);
        log.info(JSON.toJSONString(list));
    }

    // -----------------JSONObject-来自fastJson2----------------------
    @Test
    public void test5() {
        // JSON转JSONObject
        String jsonString = "{\"name\":\"张三\",\"age\":18}";
        JSONObject jsonObject = JSON.parseObject(jsonString);
        log.info(JSON.toJSONString(jsonObject));
    }

    @Test
    public void test6() {
        // JSONObject转JSON
        String jsonString = "{\"name\":\"张三\",\"age\":18}";
        JSONObject jsonObject = JSON.parseObject(jsonString);
        String name = jsonObject.getString("name");
        log.info(name);
    }

    @Test
    public void test7() {
        // JSONObject转List(JSONObject->String->List)
        String jsonString = "[{\"name\":\"张三\",\"age\":18},{\"name\":\"李四\",\"age\":19}]";
//        log.info(t);
        List<Student> list = JSONArray.parseArray(jsonString, Student.class);
        for (Student student : list) {
            log.info(student.toString());
        }
        log.info(JSON.toJSONString(list));
    }

    @Test
    public void test8() {
        // Map转JSONObject
        Map<String, Student> map = new HashMap<>();
        //
        Student student1 = new Student();
        Student student2 = new Student();
        student1.setName("张三");
        student2.setName("李四");
        student1.setAge(3);
        student2.setAge(6);
        //
        map.put("one", student1);
        map.put("two", student2);
        JSONObject json = (JSONObject) JSON.toJSON(map);
        log.info(json);
    }

    @Test
    public void test9() {
    // fastJSON不会报错,会序列化为空JSON对象
        String jsonString = "{\"name-cs\":\"张三\",\"age-cs\":18}";
        JSONObject jsonObject = JSON.parseObject(jsonString);
        Student student = JSON.to(Student.class, jsonObject);
        log.info(student);
    }

}

Jackson

java 复制代码
@Log4j2
public class JacksonTest {
    protected final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Test
    public void test1() throws JsonProcessingException {
        // JacksonTest-json键值对,不匹配或多于实体类字段
//        String jsonString = "{\"name\":\"张三\",\"age\":18}";
        String jsonString = "{\"name\":\"张三\",\"age\":18,\"cs\":\"雪豹闭嘴\"}";
        log.info(jsonString);
        ObjectMapper objectMapper = new ObjectMapper();
        Student student = objectMapper.readValue(jsonString, Student.class);
        log.info(student);
    }
}

注意

Jackson和Fastjson是两个常用的Java库,都用于处理JSON数据。

都提供了将Java对象序列化为JSON格式以及将JSON数据反序列化为Java对象的功能。

Jackson和Fastjson在序列化机制上存在一些差异。

  • Jackson的序列化机制依赖于JavaBean的规范,要求对象有对应属性的get方法。如果一个属性没有对应的get方法,Jackson在序列化时会抛出异常。

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException:

解决方案:实体类上添加@JsonIgnoreProperties(ignoreUnknown = true) 注解

表示:

  1. 当将一个对象序列化为 JSON 时,如果该对象有任何未知的属性 (即该对象的类中没有对应的字段或getter/setter方法),这些属性将被忽略,不会被序列化到 JSON 中。
  2. 当从 JSON 反序列化一个对象 时,如果 JSON 中有任何未知的属性,Jackson 将忽略它们,而不会抛出异常或错误。这意味着你可以向一个对象添加额外的 JSON 属性,而不会引发异常。
  • Fastjson则采用基于JavaBean的序列化和反序列化机制,在序列化时通过反射获取对象 的属性信息,再通过get方法获取属性值,最终将其转换为JSON字符串。如果一个属性没有对应的get方法,Fastjson无法获取到其值,导致序列化结果为空的JSON对象。
相关推荐
h39746 小时前
DirectShow过滤器开发-视频源过滤器
c++·windows·音视频·directshow
java资料站12 小时前
二、Spring AI Alibaba · ChatModel
java·windows·spring
北冥you鱼13 小时前
Go 语言空接口(interface{})使用场景与最佳实践
开发语言·windows·golang
夏虫不可与之言冰15 小时前
Windows WSL2 (Ubuntu) 搭建 ESP‑IDF 6.1 开发环境全过程演示
linux·windows·ubuntu·esp32·乐鑫科技·乐鑫eim·乐鑫代理商
打工仔折腾 AI18 小时前
FaceFusion本地换脸实战:Windows整合包、模型选择与遮罩调参记录
人工智能·windows·后端·python·深度学习·性能优化·ai agent 实战
小蜗牛狂飙记20 小时前
Windows 双击 Jar 包无反应,不用写 bat 脚本!Jarfix 一键修复(以 Struts2 扫描工具为例)
windows·struts·jar
坐看风云变幻21 小时前
Betaflight 开发环境搭建保姆级教程(Ubuntu / Windows+WSL / Docker 三方案 + 官方网址大全)
windows·ubuntu·docker·无人机·飞控·betaflight
IT技术分享社区1 天前
在 Windows 上跑未改动的 Linux 程序:微软 LiteBox v0.1 把这件事变简单了
linux·运维·windows·microsoft·开源
kakakahahahaha1 天前
Win10/Win11 Windows Hello指纹不可用处理:WbioSrvc、传感器驱动与登录策略
windows·电脑·笔记本电脑·内容运营·软件需求
小黄人软件1 天前
粘贴助手C++版 支持 Windows 7 / 10 / 11 不会出现缺少api-ms-win-core-path-11-1-0.dll
开发语言·c++·windows