2

我想将 Java 属性文件转换为带有嵌套对象的 JSON。我遵循了一个我在这里找到的例子,但我无法让它工作。

例如,给定:

objectA.version=1.0
objectA.hostname=192.168.0.11
objectA.port=9989
objectB.hostname=10.0.2.15
objectB.port=9998

我想:

{ 
  “objectA” : {
             "version” : "1.0"
             "host” : “192.168.0.11”,
             "port" : 9989
           },
  “objectB” : {
             "host” : “10.0.2.15”,
             "port" : 9998
           }
}

这是我到目前为止所拥有的:

static class Endpoint
{
    @JsonProperty("objectA")
    public ObjectA objectA;

    @JsonProperty("objectB")
    public ObjectB objectB;

}
static class ObjectA
{
    public String hostname;
    public String port;
    public String version;
}

static class ObjectB
{
    public String hostname;
    public String port;
}

try (InputStream input = getClass().getClassLoader().getResourceAsStream("file.properties"))
{
    JavaPropsMapper mapper = new JavaPropsMapper();
    Endpoint host = mapper.readValue(input, Endpoint.class);
    String asText = mapper.writeValueAsString(host);
    System.out.println(asText);
}

输出如下所示:

objectA.version=1.0
objectA.hostname=192.168.0.11
objectA.port=9989
objectB.hostname=10.0.2.15
objectB.port=9998
4

2 回答 2

3

我想到了。

try (InputStream input = getClass().getClassLoader().getResourceAsStream("file.properties"))
{
    JavaPropsMapper mapper = new JavaPropsMapper();
    Endpoint host = mapper.readValue(input, Endpoint.class);
    // String asText = mapper.writeValueAsString(host);

    // add this
    ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();
    String asText = ow.writeValueAsString(host);
    // 

    System.out.println(asText);
}
于 2017-07-07T14:27:36.030 回答
1

不确定 OP 是否需要临时对象,或者他是否只想从道具文件获取它的 JSON 表示。如果是后者,那么只使用数据绑定 ObjectNode 类作为过渡会更容易。例如

try (InputStream input = new FileInputStream("path_to.properties")) {

    JavaPropsMapper mapper = new JavaPropsMapper();
    ObjectNode node = mapper.readValue(input, ObjectNode.class);
    ObjectWriter ow = new ObjectMapper().writer().withDefaultPrettyPrinter();

    // Alternatively write to file ???
    System.out.println(ow.writeValueAsString(node);

} catch (IOException e) {
    // Do something
}
于 2018-05-20T02:02:44.463 回答