2017-07-07 148 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); 
}