有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在Java中,数组JsonArray只接受for循环中最后一个JsonObject

我需要修改使用javax.json.JsonObjectjavax.json.JsonArray库来处理JSON的现有旧代码。因为这些都是接口,所以我不能像过去在JSON的帮助下那样创建新对象并在for循环中添加所需的数据。简单库。 我需要创建一个包含不同JsonObject的JsonArray,但最终输出只包含最后一个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包含两个对象。但当我打印最终响应时,它只给出最后一个对象。请建议如何在JsonArray中添加这两个对象


共 (1) 个答案

  1. # 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);
        }
    }