2017-07-07 144 views
1

我想将具有嵌套对象的Java属性文件转换为JSON。我跟着一个例子,我发现here,但我不能得到它的工作。使用Jackson将JSON属性文件转换为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 
+0

如果您只是想打印带括号的属性文件的JSON结构,而不是,可以使用ObjectMapper。看到这个参考:https://www.mkyong.com/java/how-to-enable-pretty-print-json-output-jackson/ – suguspnk

+0

@suguspnk这不是我想做的。我想用一个嵌套(不平坦)的结构将属性文件转换为JSON。 – ksl

+0

现在我很困惑。 @。@ – suguspnk

回答

1

我想通了。

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