如何创建如下 Java 中给出的复杂结构的 JsonObject?

How to create a JsonObject of complex structure like given below in Java?

{
    "A": {
        "B": {
            "C": {
                "D": "123"
            },
            "E": {
                "F": {
                    "G": "aaabbb"
                },
                "H": "QWE",
                "I": {
                    "J": "003",
                    "K": "01"
                }
            },
            "L": {
                "M": {
                    "N": "1603",
                    "O": "QWE"
                },
                "P": "N",
                "Q": "N"
            },
            "R": {
                "S": "10000",
                "T": "QWE"
            },
            "U": {
                "V": "0",
                "W": "13"
            },
            "X": {
                "Y": "123456"
            }
        },
        "ABC": {
            "QQ": "5",
            "WW": "O"
        }
    }
}

我想创建一个类似的 Json 字符串,而不必创建所有这些 类 A、B、C 等。我可以通过为每个 类 创建它这些标签 A、B、C 等使用 Jackson 库的 ObjectMapper。有没有更简单的方法来实现这个?

正如我在评论中所述,有几种方法。

嵌套地图

ObjectMapper om = new ObjectMapper();
    
Map<String, Map<String, Map<String, Map<String, Object>>>> map = new HashMap<>();
    
map.computeIfAbsent("A", k -> new HashMap<>())
   .computeIfAbsent("B", k -> new HashMap<>())
   .computeIfAbsent("C", k -> new HashMap<>())
   .put("D", "123");
        
((Map<String, String>)map.computeIfAbsent("A", k -> new HashMap<>())
     .computeIfAbsent("B", k -> new HashMap<>())
     .computeIfAbsent("E", k -> new HashMap<>())
     .computeIfAbsent("F", k -> new HashMap<String, String>()))
     .put("G", "aaabbb");       
    
String json = om.writeValueAsString(map);

computeIfAbsent() 这样的方法在必须始终检查中间映射的存在方面有很大帮助,但正如您所看到的,如果结构不统一,这可能会变得难以处理。

当然你也可以用其他方式来建图,这里只是一个简单的演示。

使用 ObjecNode(如果需要,还使用 ​​ArrayNode)

ObjectMapper om = new ObjectMapper();

ObjectNode root = om.createObjectNode();
ObjectNode nodeA = om.createObjectNode();
root.set("A", nodeA);
    
ObjectNode nodeB = om.createObjectNode();
nodeA.set("B", nodeB);
    
ObjectNode nodeC = om.createObjectNode();
nodeB.set("C", nodeC);
nodeC.put("D", "123");
    
ObjectNode nodeE = om.createObjectNode();
nodeB.set("E", nodeE);
    
ObjectNode nodeF = om.createObjectNode();
nodeE.set("F", nodeF);
nodeF.put("G", "aaabbb");

String json = om.writeValueAsString(root);

同样,有多种方法可以构建此节点层次结构。

两个示例都产生以下(未格式化)json,它反映了结构的第一部分:

{"A":{"B":{"C":{"D":"123"},"E":{"F":{"G":"aaabbb"}}}}}