Jackson实现json的序列化反序列化

本文详细介绍了如何使用Jackson库进行JSON数据的序列化和反序列化操作,包括配置Jackson、对象转换为JSON字符串、JSON字符串解析为对象等关键步骤,助你轻松处理JSON数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package cn.veryjava.funny;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.junit.Assert;
import org.junit.Test;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class Json {

  @Test
  public void testJson() {
    Employee e1 = new Employee("1", "吕永强", 88);
    Employee e2 = new Employee("2", "高文君", 89);
    Employee e3 = new Employee("3", "孟贝", 90);

    List<Employee> employees = new ArrayList<>();
    employees.add(e1);
    employees.add(e2);
    employees.add(e3);

    Company 序列化 = new Company("1", "脚印科技", employees);

    // 序列化
    ObjectMapper om = new ObjectMapper();
    String json = "";
    try {
      json = om.writeValueAsString(序列化);
    } catch (JsonProcessingException e) {
      System.out.println("json序列化出错");
    }

    System.out.println("序列化后的字符串:" + json);

    // 反序列化
    Company 反序列化 = null;
    try {
      反序列化 = om.readValue(json, Company.class);
    } catch (IOException e) {
      System.out.println("json反序列化出错");
    }

    System.out.println("反序列化后对象的toString():" + 反序列化);

    // 直接打印对象属性
    Assert.assertNotEquals(null, 反序列化);

    System.out.println("公司ID:" + 反序列化.getId());
    System.out.println("公司名称:" + 反序列化.getName());

    反序列化.getEmployees().forEach(employee -> {
      System.out.println("员工id:" + employee.getId());
      System.out.println("员工姓名:" + employee.getName());
      System.out.println("员工年龄:" + employee.getAge());
    });

    Map<String, Object> map = new HashMap<>();
    map.put("身高", 180);
    map.put("有没有对象", "有");

    List<String> l = new ArrayList<>();
    l.add("a");
    l.add("e");
    l.add("u");

    map.put("list", l);

    String json1 = "";
    try {
      json1 = om.writeValueAsString(map);
    } catch (JsonProcessingException e) {
      //  略
    }

    System.out.println("map对象序列化后的字符串:" + json1);

    try {
      Map<String, Object> map2 = om.readValue(json1, Map.class);
      System.out.println("身高:" + map2.get("身高"));
      System.out.println("有没有对象:" + map2.get("有没有对象"));

      List<String> lll = (List<String>) map2.get("list");

      lll.forEach(llll-> System.out.println(llll));
    } catch (IOException e) {
      //  略
    }

  }
}

class Company {
  private String id;
  private String name;
  private List<Employee> employees;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public List<Employee> getEmployees() {
    return employees;
  }

  public void setEmployees(List<Employee> employees) {
    this.employees = employees;
  }

  public Company(String id, String name, List<Employee> employees) {
    this.id = id;
    this.name = name;
    this.employees = employees;
  }

  public Company() {
  }

  @Override
  public String toString() {
    return "Company{" +
        "id='" + id + '\'' +
        ", name='" + name + '\'' +
        ", employees=" + employees +
        '}';
  }
}

class Employee {
  private String id;
  private String name;
  private int age;

  public String getId() {
    return id;
  }

  public void setId(String id) {
    this.id = id;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public Employee(String id, String name, int age) {
    this.id = id;
    this.name = name;
    this.age = age;
  }

  public Employee() {
  }

  @Override
  public String toString() {
    return "Employee{" +
        "id='" + id + '\'' +
        ", name='" + name + '\'' +
        ", age=" + age +
        '}';
  }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值