围绕Lambda Expressions的一个简单问题。我有以下文字:
{"主机":[{"磁盘":[{"路径":" /"" SPACE_USED& #34;:0.608}],"主机名":"主机1"},{"磁盘":[{"路径":&# 34; /"" SPACE_USED":0.79},{"路径":" /选择"" SPACE_USED":0.999 }],"主机名":"主机2"},{"磁盘":[{"路径":" /&# 34;," SPACE_USED":0.107}],"主机名":" host3上"}]}
我想将上述内容格式化为每行阅读:
{"主机名":"主机1","磁盘":["路径' /'已经使用了60.8%"]}
{"主机名":"主机2","磁盘":["路径' /'已经使用了79%"," Path' / opt'使用了99.9%"]}
{"主机名":"主机3","磁盘":["路径' /'已经使用了10.7%"]}
我在.stream()。map()和.collect()周围尝试了一些排列,但不知怎的,我得到了我需要的输出。如果问题相当愚蠢,那么任何帮助都会受到高度赞赏和道歉。感谢。
答案 0 :(得分:0)
您可以使用Jackson 2 Library将JSON-String转换为Java对象。
在你的具体案例中你可以例如创建以下类:
<强> Disk.java 强>
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"path", "space_used"})
public class Disk implements Serializable {
private final static long serialVersionUID = -6127352847480270783L;
@JsonProperty("path")
private String path;
@JsonProperty("space_used")
private Double spaceUsed;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonProperty("path")
public String getPath() {
return path;
}
@JsonProperty("path")
public void setPath(String path) {
this.path = path;
}
@JsonProperty("space_used")
public Double getSpaceUsed() {
return spaceUsed;
}
@JsonProperty("space_used")
public void setSpaceUsed(Double spaceUsed) {
this.spaceUsed = spaceUsed;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
Host.java
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"disks", "hostname"})
public class Host implements Serializable {
private final static long serialVersionUID = -1972892789688333505L;
@JsonProperty("disks")
private List<Disk> disks = null;
@JsonProperty("hostname")
private String hostname;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonProperty("disks")
public List<Disk> getDisks() {
return disks;
}
@JsonProperty("disks")
public void setDisks(List<Disk> disks) {
this.disks = disks;
}
@JsonProperty("hostname")
public String getHostname() {
return hostname;
}
@JsonProperty("hostname")
public void setHostname(String hostname) {
this.hostname = hostname;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
HostContainer.java
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({"hosts"})
public class HostContainer implements Serializable {
private final static long serialVersionUID = 7917934809738573749L;
@JsonProperty("hosts")
private List<Host> hosts = null;
@JsonIgnore
private Map<String, Object> additionalProperties = new HashMap<String, Object>();
@JsonProperty("hosts")
public List<Host> getHosts() {
return hosts;
}
@JsonProperty("hosts")
public void setHosts(List<Host> hosts) {
this.hosts = hosts;
}
@JsonAnyGetter
public Map<String, Object> getAdditionalProperties() {
return this.additionalProperties;
}
@JsonAnySetter
public void setAdditionalProperty(String name, Object value) {
this.additionalProperties.put(name, value);
}
}
用法:
public void parseMessage() throws IOException {
String msg = "{\"hosts\":[{\"disks\":[{\"path\":\"/\",\"space_used\":0.608}]," +
"\"hostname\":\"host1\"},{\"disks\":[{\"path\":\"/\",\"space_used\":0.79}," +
"{\"path\":\"/opt\",\"space_used\":0.999}],\"hostname\":\"host2\"}," +
"{\"disks\":[{\"path\":\"/\",\"space_used\":0.107}],\"hostname\":\"host3\"}]}";
ObjectMapper mapper = new ObjectMapper();
// This object will contain all the information you need, access it using e.g. getHosts();
HostContainer hostContainer = mapper.readValue(msg, HostContainer.class);
}