将 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-web
和 spring-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】:您可以使用 ObjectMapper 或 Gson 进行 Class 到 JSON 的转换,反之亦然。
(我会推荐 ObjectMapper)
对象映射器Intro to the Jackson ObjectMapper
GSONHow 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