【问题标题】:Convert POJO into JSON [duplicate]将 POJO 转换为 JSON [重复]
【发布时间】:2023-02-02 12:24:09
【问题描述】:

我有一个 POJO。

@Data
@AllArgsConstructor
@Builder
public class Emp {
    private String position;
    private String name;
}

假设,我们创建了一个对象

Emp emp = new Emp("Manager", "Bob");

如何将其转换为列表并以 JSON 格式保存在数据库中?

数据应按以下格式存储在数据库中:

{
  list:[
    {
       position: Manager
       name: Bob
    }
  ]
}

有现成的解决方案吗?

我将一个对象转换为一个列表,然后在其上调用了 .toString() 方法:

Collections.singletonList(emp);

但是当我将它存储到数据库中时,下一次保存到数据库中:

[Emp(position=Manager, name=Bob)]

但我需要以不同的方式存储记录

【问题讨论】:

    标签: java json spring spring-boot jackson


    【解决方案1】:

    如何将其转换为列表并将其保存在 JSON 的数据库中 格式?

    数据应按以下格式存储在数据库中:

    {
      "list": [
        {
           "position": "Manager"
           "name": "Bob"
        }
      ]
    }
    

    由于序列化的 JSON 需要具有属性 "list",因此您不能简单地按原样序列化 List。

    相反,您可以定义一个包装此列表的 POJO。

    这就是它的样子(为了使其适合序列化任何类型的列表,我将其设为通用):

    @Data
    @AllArgsConstructor
    public static class ListWrapper<T> {
        private List<T> list;
    }
    

    这就是使用 Jackson 的 ObjectMapperObjectWriter 序列化它的方式:

    List<Emp> emps = List.of(new Emp("Manager", "Bob"));
    ListWrapper<Emp> listWrapper = new ListWrapper<>(emps);
            
    ObjectMapper mapper = new ObjectMapper();
    ObjectWriter writer = mapper.writerWithDefaultPrettyPrinter();
            
    String json = writer.writeValueAsString(listWrapper);
    System.out.println(json);
    

    输出:

    {
      "list" : [ {
        "name" : "Manager",
        "position" : "Bob"
      } ]
    }
    

    【讨论】:

      【解决方案2】:

      如果您需要将对象列表作为 JSON 存储在数据库中,那么您需要使用 Jackson ObjectMapper 将对象列表转换为 JSON 字符串。将转换后的字符串存储到数据库中。

      【讨论】:

        猜你喜欢
        • 2017-03-22
        • 2019-07-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-17
        • 1970-01-01
        • 2012-08-25
        相关资源
        最近更新 更多