测试-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对象。
相关推荐
水饺编程1 小时前
第5章,[Win32 章节] :贝塞尔样条曲线(一)
c语言·c++·windows·visual studio
辻弋2011 小时前
一键优化电源计划、游戏模式、独显强制、禁用后台录制——DeltaForceBooster专治三角洲行动卡顿掉帧,所有改动可一键还原
服务器·数据库·windows·游戏·电脑·php
言乐62 小时前
Python实现自动拉人脚本示例
开发语言·windows·python·django·pygame
深念Y3 小时前
OnlyOffice 打开来自 Windows/WPS 的 Office 文档时,出现排版错乱、文字空白、字体显示异常。
linux·windows·debian·onlyoffice·字体·wps·office
易点云徐源3 小时前
(已解决)adb devices 不显示设备,但 Windows 的 ADB Interface 正常:一次 WinUSB 与旧版 ADB 兼容性排查实战
windows·adb
奈斯先生Vector3 小时前
OpenScience 安装失败怎么办?Windows 环境、API 配置与本地服务排错指南
人工智能·windows·架构·开源·aigc·midjourney
AxureMost3 小时前
C盘清理工具 LightC
windows
csdn_aspnet4 小时前
C# 高效便利的处理数据
开发语言·windows·c#
vortex54 小时前
composer.json 可写场景下的利用手段
android·json·composer
淡海水4 小时前
03-02-线性-List-T-动态数组布局-扩容与操作成本
数据结构·windows·c#·list·编译·clr·机器码