gpt4 book ai didi

java - 填充构建器类,然后从中创建一个 json 字符串

转载 作者:行者123 更新时间:2023-12-01 21:47:55 25 4
gpt4 key购买 nike

我需要创建一个 Builder 类,其中需要具有以下字段,因此当我在 Builder 类中填充这些字段时,然后如果我在其上调用 toJson 方法,我需要将其创建为好吧,那么它应该使 json 结构如下所示:

{
"id": "hello",
"type": "process",
"makers": {
"typesAndCount": {
"abc": 4,
"def": 3,
"pqr": 2
}
}
}

上面 JSON 中的键始终是固定的,只有值会改变。但在 typesAndCount 字段中,我有三个不同的键 abcdefpqr。有时我会有一把 key 或两把 key 或所有 key 。因此,typesAndCount 键中的内容可能会根据传递的内容而改变。以下也是可能的情况。

{
"id": "hello",
"type": "process",
"makers": {
"typesAndCount": {
"abc": 4,
"def": 3,
}
}
}

我从 Builder 类中的以下代码开始,但不确定应该如何进一步进行。

public class Key {

private final String id;
private final String type;

// confuse now

}

我只想在我的类中填充数据,然后调用一些方法,它可以是 toJson 来制作上述 JSON 格式的字符串。

最佳答案

用于流畅配置数据构建器的用户构建器模式。例如

class Builder {

private final String id;
private final String type;

private Map<String, Integer> map = new HashMap<>();

// mandatory fields are always passed through constructor
Builder(String id, String type) {
this.id = id;
this.type = type;
}

Builder typeAndCount(String type, int count) {
map.put(type, count);
return this;
}

JsonObject toJson() {

JsonObjectBuilder internal = null;
if (!map.isEmpty()) {
internal = Json.createObjectBuilder();
for (Map.Entry<String, Integer> e: map.entrySet()) {
internal.add(e.getKey(), e.getValue());
}
}
// mandatory fields
JsonObjectBuilder ob = Json.createObjectBuilder()
.add("id", id)
.add("type", type);

if (internal != null) {
ob.add("makers", Json.createObjectBuilder().add("typesAndCount", internal));
}
return ob.build();
}

public static void main(String[] args) {
Builder b = new Builder("id_value", "type_value")
.typeAndCount("abs", 1)
.typeAndCount("rty", 2);

String result = b.toJson().toString();
System.out.println(result);
}
}

如您所见,您可以根据需要多次调用 typeAndCount ,甚至根本不调用它。 toJson 方法处理这个没有任何问题。

更新:方法main中的输出例如是

{"id":"id_value","type":"type_value","makers":{"typesAndCount":{"abs":1,"rty":2}}}

更新 2:根本没有“typeAndCount”方法调用的构建器将产生此输出

{"id":"id_value","type":"type_value"}

关于java - 填充构建器类,然后从中创建一个 json 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35708726/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com