测试-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对象。
相关推荐
molaoye31 分钟前
Windows修改系统环境变量不需要重启电脑之骚操作
windows
wling030110 小时前
vasp虚频计算-python脚本
开发语言·windows·python·vasp计算
猿长大人14 小时前
C# | JSON 序列化中的多态接口处理:基于 Attribute 实现精准 $type 控制
c#·json
在世修行16 小时前
Windows 上 Docker Desktop 部署 MySQL + TDengine 全过程(含 WSL 报错与镜像加速排障实战)
windows·mysql·docker·tdengine
消失的旧时光-194317 小时前
第六篇:Redis Hash——一个用户对象应该保存成 JSON,还是保存成 Hash?
redis·json·哈希算法
Richard.Wong19 小时前
Windows IIS 服务器部署 Vue3 前端项目详细流程
服务器·前端·windows
SEO_juper19 小时前
2026年Schema自动注入实战:用Python批量给1000个页面加上JSON-LD,AI引用率实测提升38%
人工智能·python·json·seo·独立站
Wang's Blog21 小时前
AI Agent白手起家37: LangChain 输出解析器实战:文本、JSON、XML 与 Pydantic
xml·langchain·json
灵析表格21 小时前
json_ObjectToKV 函数深度研究报告
json·excel·wps·灵析表格·excel公式盒子
wtsolutions1 天前
JSON 怎么导入 WPS?怎么转换成 WPS 表格?WPS 怎么打开 JSON?完整教程
json·wps