java - 将 HOCON 字符串转换为 Java 对象

标签 java json parsing pojo hocon

我的一个网络服务返回以下 Java 字符串:

[
  {
    id=5d93532e77490b00013d8862, 
    app=null,
    manufacturer=pearsonEducation, 
    bookUid=bookIsbn, 
    model=2019,
    firmware=[1.0], 
    bookName=devotional, 
    accountLinking=mandatory
  }
]

我有上述字符串的等效 Java 对象。我想将上述 java 字符串类型转换或转换为 Java 对象。

我无法对其进行类型转换,因为它是一个字符串,而不是一个对象。所以,我试图将 Java 字符串转换为 JSON 字符串,然后我可以将该字符串写入 Java 对象,但没有运气得到 invalid character "=" 异常。

Can you change the web service to return JSON?

那是不可能的。他们没有改变他们的契约(Contract)。如果他们返回 JSON,那将非常容易。

最佳答案

您的网络服务返回的格式有自己的名称 HOCON。 (您可以阅读更多相关信息 here )

不需要自定义解析器。不要试图重新发明轮子。 请改用现有的。


将此 Maven 依赖项添加到您的项目中:

<dependency>
    <groupId>com.typesafe</groupId>
    <artifactId>config</artifactId>
    <version>1.3.0</version>
</dependency>

然后按如下方式解析响应:

Config config = ConfigFactory.parseString(text);

String id = config.getString("id");
Long model = config.getLong("model");

还有一个选项可以将整个字符串解析为 POJO:

MyResponsePojo response = ConfigBeanFactory.create(config, MyResponsePojo.class);

不幸的是,这个解析器不允许 null 值。因此,您需要处理 com.typesafe.config.ConfigException.Null 类型的异常。


另一种选择是将 HOCON 字符串转换为 JSON:

String hoconString = "...";
String jsonString = ConfigFactory.parseString(hoconString)
                                 .root()
                                 .render(ConfigRenderOptions.concise());

然后您可以使用任何 JSON 到 POJO 的映射器。

关于java - 将 HOCON 字符串转换为 Java 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58288713/

相关文章:

c - 将文本文件读入 C 中的二维数组

java - 指定 AWS Cloudwatch 日志客户端的凭证

javascript - 使用 AngularJS,我如何利用 ng-show 针对数组来查找某些值?

ios - 我想存储 json 数据并在需要 ios 时使用它

c++ - boost 变体的 spirit 传承

Java JSoup 库 element.text() 返回 '&nbsp;' 作为 #160 ASCII 字符

javascript - 从 ionic 项目中的 typescript 调用 javascript 函数

java - 如何获取当前TAI时间?

java - Spring Security 在新应用程序启动时重定向到无效 session url

mysql - 在同一个 MySQL 表中存储异构 json 对象?