将 HOCON 字符串转换为 Java 对象

Vel*_*aga 3 java parsing json pojo hocon

我的 Web 服务之一返回 Java 字符串下方:

[
  {
    id=5d93532e77490b00013d8862, 
    app=null,
    manufacturer=pearsonEducation, 
    bookUid=bookIsbn, 
    model=2019,
    firmware=[1.0], 
    bookName=devotional, 
    accountLinking=mandatory
  }
]
Run Code Online (Sandbox Code Playgroud)

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

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

您可以更改 Web 服务以返回 JSON 吗?

那是不可能的。他们没有改变他们的合同。如果他们返回 JSON,那就太容易了。

ETO*_*ETO 9

您的网络服务返回的格式有自己的名称HOCON。(你可以在这里阅读更多关于它的信息

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


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

<dependency>
    <groupId>com.typesafe</groupId>
    <artifactId>config</artifactId>
    <version>1.3.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

然后解析响应如下:

Config config = ConfigFactory.parseString(text);

String id = config.getString("id");
Long model = config.getLong("model");
Run Code Online (Sandbox Code Playgroud)

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

MyResponsePojo response = ConfigBeanFactory.create(config, MyResponsePojo.class);
Run Code Online (Sandbox Code Playgroud)

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


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

String hoconString = "...";
String jsonString = ConfigFactory.parseString(hoconString)
                                 .root()
                                 .render(ConfigRenderOptions.concise());
Run Code Online (Sandbox Code Playgroud)

然后您可以使用任何 JSON-to-POJO 映射器。