如何使用jackson为单个密钥的多个节点创建JSON



我想在Java中使用Jackson创建一个类似以下的JSON。如果没有一把钥匙,我就能做到。在这种情况下;TestProject1分期;它不能保存";儿童";以及";vars";同时

"TestProject1-staging": {
"children" : [ "TestProject1-staginga", "TestProject1-stagingb", "TestProject1-stagingc" ],
"vars": {
"projects": {
"TestProject1": {
"app_tier": "apptier",
"remote_dir": "/release/Test1"
}
}
}
}

这是我写的代码:

ObjectMapper mapper = new ObjectMapper();
ObjectNode projects = mapper.createObjectNode();
ObjectNode finalObj = mapper.createObjectNode();
ObjectNode proRootNode = mapper.createObjectNode();
ObjectNode children = mapper.createObjectNode();
ObjectNode proRoot = mapper.createObjectNode();
proRoot.put("app_tier", inventoryContainer.appTier);
proRoot.put("remote_dir", inventoryContainer.remoteDirectory);
proRootNode.set(projectRoot, proRoot);
projects.set("projects", proRootNode);
children.put("children", 
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(inventoryContainer.groups));
stagingVarNotSet = false;
finalObj.set(inventoryContainer.projectName, children);
varNode.set("vars", projects);
//finalObj.set(inventoryContainer.projectName, varNode);
System.out.println(StringEscapeUtils.unescapeJava(
mapper.writerWithDefaultPrettyPrinter().writeValueAsString(finalObj)));

正如您所看到的,注释行试图设置vars变量。如果取消注释,则会打印vars,但会丢失children。在当前格式中,它打印children,但不打印vars

那么,我如何将两者打印在一起呢?

检查这是否适用。

JSonCreator.java

package json;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;
public class JSonCreator {
public static void main(String[] args) {
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.createObjectNode();
// Create TestProject1 JSON Object
ObjectNode testProject1Node = mapper.createObjectNode();
testProject1Node.put("app_tier", "apptier");
testProject1Node.put("remote_dir", "/release/Test1");
// Create projects JSON Object
ObjectNode projectsNode = mapper.createObjectNode();
projectsNode.set("TestProject1", testProject1Node);
// Create vars JSON Object
ObjectNode varsNode = mapper.createObjectNode();
varsNode.set("projects", projectsNode);
// Create children JSON Array
ArrayNode childrenArrayNode = mapper.createArrayNode();
childrenArrayNode.add("TestProject1-staginga");
childrenArrayNode.add("TestProject1-stagingb");
childrenArrayNode.add("TestProject1-stagingc");
// Create children JSON object
ObjectNode childrenNode = mapper.createObjectNode();
childrenNode.set("children", childrenArrayNode);
// Create TestProject1-staging" JSON object
ObjectNode testProject1stagingNode = mapper.createObjectNode();
testProject1stagingNode.set("children", childrenArrayNode);
testProject1stagingNode.set("vars", varsNode);
// append into root node
((ObjectNode) rootNode).set("TestProject1-staging",
testProject1stagingNode);
// convert ObjectNode to pretty-print JSON
String json = null;
try {
json = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(
rootNode);
// print json
System.out.println(json);
} catch (JsonProcessingException e) {
e.printStackTrace();
}
}
}

输出:

{
"TestProject1-staging" : {
"children" : [ "TestProject1-staginga", "TestProject1-stagingb", "TestProject1-stagingc" ],
"vars" : {
"projects" : {
"TestProject1" : {
"app_tier" : "apptier",
"remote_dir" : "/release/Test1"
}
}
}
}
}

最新更新