【问题标题】:Convert Java pojo to json String将 Java pojo 转换为 json 字符串
【发布时间】:2020-04-27 12:02:41
【问题描述】:

我有以下java类

public  class TabularDescriptor extends ReportDescriptor {

    private String generatorClass;
    private String targetClass;
    private String name;
    private String sublabel;
    private String reportName;
    private List<MappingMetadata> mappings = null;
    private List<TabularColumnGroup> columnGroups = null;
    private List<TabularStates> states = null;
:
:
     and its getters and settere

我为每个列表都有实体类,例如 MappingMetadata、TabularColumnGroup、TabularStates。 我想获得这个 pojo 类的 json 数据。我能为它做些什么。

还有什么用

    public JSONObject toJSON() {
        JSONObject ret = new JSONObject();
        ret.put("generatorClass", this.generatorClass);
        ret.put("targetClass", this.targetClass);
        ret.put("name", this.name);
        :
        :
        return ret;
    }

如果可以的话,我是否可以在浏览器上显示我的 json 内容?谢谢。

【问题讨论】:

  • 看看github.com/google/gson。它似乎正是您正在寻找的。您可以使用它轻松地序列化和反序列化 Java 对象。

标签: java json objectmapper


【解决方案1】:

有 2 个库使用 Java 处理 JSON 序列化/反序列化:

  1. Gson

    用于 Java 序列化/反序列化的 Google 库 (docs)。

    依赖关系:

    Gradle:

    dependencies { 
        implementation "com.google.code.gson:gson:${yourVersion}"
    }
    

    Maven:

    <dependency>
        <groupId>com.google.code.gson</groupId>
        <artifactId>gson</artifactId>
        <version>${gson.version}</version>
    </dependency>
    

    序列化片段:

    TabularDescriptor tabularDescriptor = new TabularDescriptor();
    Gson gson = new Gson();
    String json = gson.toJson(obj);
    
  2. Jackson

    另一个用于 Java 序列化/反序列化的库 (docs)。大多数开发人员在 Java 中进行 JSON 交互的默认选择。完全嵌入 spring-boot-starter-webspring-boot-starter-webflux 中的所有依赖项,Spring Boot 的依赖项启动器之一 - 流行的 Java IOC/DI 框架。

    依赖(databind是主要依赖,注解和附加功能需要更多Jackson依赖):

    Maven:

    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.version}</version>   
    </dependency>
    

    Gradle:

    dependencies {
       implementation "com.fasterxml.jackson.core:jackson-databind:${yourVersion}"
    }
    

    序列化片段:

    TabularDescriptor tabularDescriptor = new TabularDescriptor();
    ObjectMapper mapper = new ObjectMapper();
    String json = mapper.writeValueAsString(tabularDescriptor);
    

值得注意的细节:您必须将所有 getter/setter 公开,以便对象的完全序列化和完全反序列化(以最简单的形式)。在任何情况下,一个空的构造函数都是必须的。

参考信息

  1. JSON in Java by Baeldung
  2. Jackson vs Gson by Baeldung

【讨论】:

    【解决方案2】:

    您可以使用 ObjectMapperGson 进行 Class 到 JSON 的转换,反之亦然。

    (我会推荐 ObjectMapper)

    • 对象映射器

    Intro to the Jackson ObjectMapper

    • GSON

    How to convert Java object to / from JSON

    • 比较

    Jackson(ObjectMapper) vs Gson

    【讨论】:

      【解决方案3】:

      我建议您将 Jackson 添加到您的项目中,它相当容易使用。

      <dependency>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
          <version>2.9.8</version>
      </dependency>
      

      在Java代码中可以这样使用:

      ObjectMapper objectMapper = new ObjectMapper();
      String json = objectMapper.writeValueAsString(tabularDescriptor);
      TabularDescriptor newTabularDescriptor = objectMapper.readValue(json, TabularDescriptor.class);
      

      【讨论】:

      • 谢谢。 tabularDescriptor 中的值是什么。是我使用它的设置器设置的值吗?如果是,我如何为 MappingMetadata 等 pojo 类设置值。
      • @Lilac 1) tabularDescriptor 是您的对象,例如TabularDescriptor tabularDescriptor = new TabularDescriptor(...); 2) 不确定我是否明白你的意思。您是指如何创建对象吗?最简单的方法是使用Builder Pattern,尤其是在您的情况下,因为您在表格描述符中有很多内部对象。
      • 谢谢。我不确定如何为内部对象赋值。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-20
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多