JsonArray只接受Java中for循环中的最后一个JsonObject



我需要修改一个使用javax.json.JsonObjectjavax.json.JsonArray库来处理JSON的现有旧代码。由于这些都是接口,所以我不能像过去在JSON.simple库的帮助下那样创建新对象并在循环中添加所需的数据。我需要创建一个JsonArray,它包含不同的JsonObject,但最终输出只包含最后一个JsonObject。这是代码:

import javax.json.JsonArray;
import javax.json.JsonObject;
class Test {
public void myMethod() {
Map<String, String> ep = null;
JsonArray response = null;
JsonObject epObj = null;
JsonObject epDetails = null;
try {
ep = getRequiredEp();
if (ep != null && !ep.isEmpty()) {
for (String uuid : ep.keySet()) {
ERU router = ERU.findByNFuuid(em, uuid);
if (router != null) {
ERD unit = router.findCurrent(em);
epDetails = Json.createObjectBuilder()
.add("name", ep.get(uuid))
.add("devId", unit.unit.getId())
.add("clientId", unit.store.id).build();
epObj = Json.createObjectBuilder()
.add(uuid, epDetails).build();
response = Json.createArrayBuilder()
.add(epObj).build();
}
}
logger.info("FINAL RESPONSE = {}", response);
}
} catch (Exception e) {
logger.info(e.getMessage(), e);
}
}
}

我的JsonObject包含两个对象。但当我打印Final响应时,它只给出最后一个对象。请建议如何在JsonArray中添加这两个对象。

这是因为在每次迭代中都要为响应分配一个新的JsonArray。我认为您应该在循环中使用单个数组生成器,并在外部构建数组,如下所示:

public void myMethod() {
Map<String, String> ep = null;
var builder = Json.createArrayBuilder();
JsonArray response = null;
JsonObject epObj = null;
JsonObject epDetails = null;
try {
ep = getRequiredEp();
if (ep != null && !ep.isEmpty()) {
for (String uuid : ep.keySet()) {
ERU router = ERU.findByNFuuid(em, uuid);
if (router != null) {
ERD unit = router.findCurrent(em);
epDetails = Json.createObjectBuilder()
.add("name", ep.get(uuid))
.add("devId", unit.unit.getId())
.add("clientId", unit.store.id).build();
epObj = Json.createObjectBuilder()
.add(uuid, epDetails).build();
builder.add(epObj);
}
}
response = builder.build();
logger.info("FINAL RESPONSE = {}", response);
}
} catch (Exception e) {
logger.info(e.getMessage(), e);
}
}

最新更新