【问题标题】:JsonArray taking only last JsonObject inside a for loop in JavaJsonArray 在 Java 的 for 循环中只取最后一个 JsonObject
【发布时间】:2021-08-20 13:03:14
【问题描述】:

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

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 包含两个对象。但是当我打印最终响应时,它只给出最后一个对象。请建议如何在 JsonArray 中添加两个对象。

【问题讨论】:

    标签: java arrays json


    【解决方案1】:

    那是因为您在每次迭代时为响应分配了一个新的 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);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-30
      • 2015-04-08
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 2021-12-27
      • 2016-03-03
      相关资源
      最近更新 更多