如何使用循环(动态地)将JsonObjects添加到javax.json.JsonArray

10

在Oracle.com上提供以下示例代码来将对象添加到JsonArray中。

JsonArray value = Json.createArrayBuilder()
 .add(Json.createObjectBuilder()
     .add("type", "home")
     .add("number", "212 555-1234"))
 .add(Json.createObjectBuilder()
     .add("type", "fax")
     .add("number", "646 555-4567"))
 .build();

实际上,我有一个Servlet,它会从数据库中读取数据,根据检索到的行数,将数据作为JsonObject添加到JsonArray中。为此,我能想到的方法就是使用循环将JsonObject添加到JsonArray中,但这种方法行不通。这就是我所做的。

//Not working
JsonArray jarr = Json.createArrayBuilder()
    for (int i = 0; i < posts[i]; i++)
    {
        .add(Json.createObjectBuilder()
            .add("post", posts[i])
            .add("id", ids[i]))
    }
        .build();

这是我第一次使用Java Json API。怎样才是向JsonArray动态添加对象的正确方法?


显然,for循环肯定不是一个对象,你不能在其上调用build。你应该在迭代结束时在jarr上调用build。另外,i < posts[i]可能没有任何意义。 - plalx
帖子和ID是包含要添加的数据的字符串数组。 - eMad
2个回答

19

你所发的内容不是用Java编写的。

首先获取构建器:

JsonArrayBuilder builder = Json.createArrayBuilder();

然后在循环中迭代并添加对象:

for(...) {
  builder.add(/*values*/);
}

最终获取到了 JsonArray:

JsonArray arr = builder.build();

非常感谢!这节省了我数小时的挫败感:原来我需要在build()之前添加JsonObject - kohane15

4

在每个迭代的结尾,您需要完成构建JsonObjectBuilder才能使其正常工作。

JsonArrayBuilder jarr = Json.createArrayBuilder();
for (int i = 0; i < posts[i]; i++)
{
    jarr.add(Json.createObjectBuilder()
        .add("post", posts[i])
        .add("id", ids[i]).build());
}
    jarr.build();

1
你的第一行代码在我的电脑上无法编译。第一个单词应该是JsonArrayBuilder。然后它应该被称为builder,而不是jarr。 - i2B
这个概念很好,但命名规范有点混乱。 - james.garriss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接