将 Java pojo 转换为 json 字符串

2024-05-31

我有以下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 内容吗?如果可以的话,我该怎么办?谢谢。


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

  1. Jackson https://github.com/FasterXML/jackson

    Java 序列化/反序列化的首选库(docs https://github.com/FasterXML/jackson-docs)。对于大多数开发人员来说,Java 中 JSON 交互的默认选择。完全嵌入了所有依赖项spring-boot-starter-web and spring-boot-starter-webflux,依赖启动器春季启动 https://spring.io/projects/spring-boot- 流行的 Java IOC/DI 框架。

    Dependencies (databind is the main dependency, for annotations and additional features you will need more Jackson dependencies):

    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);
    
  2. Gson https://github.com/google/gson

    Google 的 Java 序列化/反序列化库(docs https://www.javadoc.io/doc/com.google.code.gson/gson/latest/com.google.gson/module-summary.html).

    依赖项:

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

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

参考信息:

  1. Java 中的 JSON 作者:Baeldung https://www.baeldung.com/java-json
  2. 杰克逊 vs Gson by Baeldung https://www.baeldung.com/jackson-vs-gson
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 Java pojo 转换为 json 字符串 的相关文章

随机推荐

  • 在 Erlang 中实现图灵机

    我有一个小项目 与实现图灵机非常相似 我遇到的基本问题是保存当前配置 例如头部的位置和更多信息 对我来说特别重要的是保留头部位置以使其向前或向后移动 Erlang 解决这个问题的方法是什么 我是 Erlang 新手 但据我探索 OTP ge
  • 如何覆盖 suhosin 最大值?

    suhosin 正在过滤一个重要的 GET 参数 当以下方法不起作用时 如何覆盖 suhosin public html php ini suhosin suhosin get max value length 2048 将 suhosin
  • React-Redux:操作必须是普通对象。使用自定义中间件进行异步操作

    未处理的拒绝 错误 操作必须是普通对象 使用自定义中间件进行异步操作 我想为每个帖子添加评论 因此 当运行获取帖子时 我想为所有帖子调用获取评论 API export function bindComments postId return
  • 在unix、bash中合并csv文件

    我有一些 csv 文件 其格式如下 测试1 csv field port1 a1 0 2 a2 0 3 a3 0 6 测试2 csv field port2 b1 0 5 b2 0 6 b3 0 7 b4 0 1 b5 0 5 测试3 cs
  • Java swing - 单击时执行操作

    我想我已经把自己逼到了一个角落里 我正在尝试使用 java swing 来做一些事情 单击 下一步 按钮时 从文件中加载新行 通过行索引号 然后如果文件中该行的日期尚未到达 则使 下一个 按钮变灰 我的问题是 当我有以下代码时 Scanne
  • sails.js 水线嵌套填充查询

    我有一个返回对象的多个结果的查找查询 该对象包含一个包含另一个模型的模型 问题是水线不支持嵌套填充 因此它填充第一个模型 但不填充它的内部模型 我见过的所有示例都是针对 findOne 查询的 我正在寻找一种方法来解决返回多个结果的查找查询
  • 错误:Google Play 服务存在未知问题

    这在过去一周突然出现 我尝试通过 VCS 恢复更改 但错误似乎仍然存在 我也不记得对控制台进行过任何更改 错误信息 Google Play 服务的未知问题 这会在登录似乎完成后出现 我正在使用 BaseGameActivity 并遵循教程
  • 如何使用 HHVM proxygen 重写规则忽略任何文件?

    我创建一个这样的文件example ini hhvm server type proxygen hhvm server default document index php hhvm virtual host default rewrite
  • 使用 JOGL 编译文件时出现问题

    我正在尝试使用 JOGL 通过命令行编译一个简单的程序 这实际上不起作用 我尝试按照官方文档的建议引用 jogl all jar gluegen rt jar nativewindow all jar 和 newt all jar 但编译器
  • 错误:“Int”无法转换为“@lvalue Float”

    给定以下函数 func greatestCommonDenominator first Int second Int gt Int return second 0 first greatestCommonDenominator second
  • 虚拟类继承对象大小问题

    在这里 在这段代码中 ob1的大小是16 这很好 因为虚拟指针 但我不明白为什么ob2的大小是24 include
  • RxJava 棘手的 startWith(Observable)

    以下代码仅在 observable2 完成后才从 observable1 发出项目 observable1 startWith observable2 subscribe 我需要实现另一种行为 observable1 gt 0 1 2 3
  • C++11:数组的编译时计算

    假设我有一些 constexpr 函数 f constexpr int f int x 我在编译时知道一些 const int N Either define N or const int N 根据您的回答的需要 我想要一个 int 数组
  • 从 C++ 调用 Python 脚本并使用其输出

    我想从 C 调用 python 脚本 并希望使用该脚本生成的输出 csv 文件返回 C 我在 main 中尝试过 std string filename home abc xyz script py std string command p
  • 建立了无需 SSL 即可进行安全注册和身份验证的 javascript 解决方案

    有没有无需 SSL 即可实现安全用户注册和身份验证的解决方案 安全 我的意思是免受被动窃听 不是来自中间人 http en wikipedia org wiki Man in the middle attack 我知道只有带有签名证书的 S
  • 如何在python中获取硬盘驱动器的序列号

    我尝试使用wmi来获取硬盘的序列号 我所做的是这样的 启动ipython并使用以下方式获取序列号 import wmi c wmi WMI for x in c Win32 PhysicalMedia print x 结果是这样的 inst
  • 避免指定包含模板化函数指针的冗余模板参数

    假设我们有这样的代码 template
  • 该文件正在被另一个进程使用,我必须关闭它吗?如何?

    我正在使用一个文本文件来保存一些数据以供以后使用 所以我所做的就是检查文件是否存在 如果不存在 我会在需要时创建一个新文件 这给了我错误 说我的文件仍在被不同的进程使用 但我不确定为什么会这样 我就是这样做的 在这里 我正在检查程序运行时启
  • 线性问题和非线性问题之间的区别?点积和核技巧的本质

    核技巧将非线性问题映射为线性问题 我的问题是 1 线性问题和非线性问题的主要区别是什么 这两类问题的差异背后的直觉是什么 核技巧如何帮助在非线性问题上使用线性分类器 2 为什么点积在这两种情况下如此重要 Thanks 当人们说到分类问题的线
  • 将 Java pojo 转换为 json 字符串

    我有以下java类 public class TabularDescriptor extends ReportDescriptor private String generatorClass private String targetCla