将 Java pojo 转换为 json String

2022-09-03 14:43:44

我有以下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

我为每个列表提供了实体类,如MapingMetadata,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内容,如果是,我该怎么做?谢谢。


答案 1

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

  1. 杰克逊

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

    依赖关系(databind是主要的依赖关系,对于注释和其他功能,您将需要更多的Jackson依赖关系)

    专家:

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

    等级:

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

    序列化代码段:

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

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

    依赖:

    等级:

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

    专家:

    <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);
    

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

参考信息

  1. JSON in Java by Baeldung
  2. 杰克逊 vs 格森 by 贝尔东

答案 2

我建议您将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);