将 Java pojo 转换为 json 字符串

Posted

技术标签:

【中文标题】将 Java pojo 转换为 json 字符串【英文标题】:Convert Java pojo to json String 【发布时间】: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 对象。 【参考方案1】:

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

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

    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 公开,以便对象的完全序列化和完全反序列化(以最简单的形式)。在任何情况下,一个空的构造函数都是必须的。

参考信息

    JSON in Java by Baeldung 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,尤其是在您的情况下,因为您在表格描述符中有很多内部对象。 谢谢。我不确定如何为内部对象赋值。

以上是关于将 Java pojo 转换为 json 字符串的主要内容,如果未能解决你的问题,请参考以下文章

使用jackson将pojo(对象列表)转换为java中的json

将字符串转换为应用程序/八位字节流 Java

需要基于 xml-mapping 将 POJO 转换为 XML 和 JSON 的工具

使用改造将不一致的 JSON 解析为 POJO

将火花行对象转换为 java pojo

是否有将 Java POJO 转换为 JSON 和 XML 的库? [关闭]