将几个 json 个对象 Java 与 jackson 合并
Merge several json objects Java with jackson
我使用 java 委托并使用 getVariable 读取执行变量。在执行变量中,我有许多字符串化的 JSON 对象。我遍历所有对象并读取以下列方式创建一个 json 节点,
for (String name: execution.getVariableNames()) {
JsonNode data = objectMapper.readTree(execution.getVariable(name).toString());
System.out.println(data);
}
我从上面的 for 循环中得到了所有单独的 JSON 对象。
{"username": "testUser", "company": "TestCompany"}
{"app": "testApp", "subscriberCount": 20000}
{"appCount": 20}
以上是我收到的输出示例。我想要的是将上述 json 对象组合到循环中的单个 json 对象。输出应该是这样的。
{
"username": "testUser",
"company": "TestCompany",
"app": "testApp",
"subscriberCount": 20000,
"appCount": 20
}
我想动态合并所有对象。这意味着我不想在合并时考虑 json 对象中的数据。
您可以生成一个新对象并遍历现有数据对象中的字段以将它们分配给新对象。
This existing answer 展示了如何通过遍历对象的字段来合并对象。它执行 deeper-level 合并,但要简单地合并 top-level 键,您可以对每个 data
对象执行类似的操作,将它们的字段放入单个 ObjectNode
:
ObjectNode merged = objectMapper.createObjectNode();
for (String name: execution.getVariableNames()) {
JsonNode data = objectMapper.readTree(execution.getVariable(name).toString());
data.fields()
.forEachRemaining(f -> merged.putIfAbsent(f.getKey(), f.getValue()));
}
(在这种情况下,forEachRemaining
行是将一个对象的键添加到另一个对象的相关行。)
我使用 java 委托并使用 getVariable 读取执行变量。在执行变量中,我有许多字符串化的 JSON 对象。我遍历所有对象并读取以下列方式创建一个 json 节点,
for (String name: execution.getVariableNames()) {
JsonNode data = objectMapper.readTree(execution.getVariable(name).toString());
System.out.println(data);
}
我从上面的 for 循环中得到了所有单独的 JSON 对象。
{"username": "testUser", "company": "TestCompany"}
{"app": "testApp", "subscriberCount": 20000}
{"appCount": 20}
以上是我收到的输出示例。我想要的是将上述 json 对象组合到循环中的单个 json 对象。输出应该是这样的。
{
"username": "testUser",
"company": "TestCompany",
"app": "testApp",
"subscriberCount": 20000,
"appCount": 20
}
我想动态合并所有对象。这意味着我不想在合并时考虑 json 对象中的数据。
您可以生成一个新对象并遍历现有数据对象中的字段以将它们分配给新对象。
This existing answer 展示了如何通过遍历对象的字段来合并对象。它执行 deeper-level 合并,但要简单地合并 top-level 键,您可以对每个 data
对象执行类似的操作,将它们的字段放入单个 ObjectNode
:
ObjectNode merged = objectMapper.createObjectNode();
for (String name: execution.getVariableNames()) {
JsonNode data = objectMapper.readTree(execution.getVariable(name).toString());
data.fields()
.forEachRemaining(f -> merged.putIfAbsent(f.getKey(), f.getValue()));
}
(在这种情况下,forEachRemaining
行是将一个对象的键添加到另一个对象的相关行。)