从List创建JsonArray

4


我需要从一个JsonObjects的java.util.List中创建一个javax.json.JsonArray对象(Java EE 7 API)。 以前,在使用JSON API时,我通常可以简单地使用以下代码进行操作:

JSONArray jsonArray = new JSONArray(list);

但是我可以看到在javax.json.JsonArray中没有等效的构造函数。有没有简单的方法(除了浏览所有List)来做到这一点?
谢谢


1
javadoc中包含了示例... - fge
在这个例子中,list是什么? - Bex
已经检查过了。但是Javadocs包含以下示例: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(); 这不是我要求的 - 我已经有一个List<JsonObjects>。 - user2824073
我不知道Java内部有一个JSON包。 - Sikorski
@Sikorski 只在 Java EE 中。 - fge
2个回答

10

不幸的是,标准的JsonArrayBuilder不支持以列表作为输入。因此,您需要遍历该列表。

我不知道您的List是什么样子的,但您可以编写一个类似于以下函数:

public JsonArray createJsonArrayFromList(List<Person> list) {
    JsonArray jsonArray = Json.createArrayBuilder();
    for(Person person : list) {
        jsonArray.add(Json.createObjectBuilder()
            .add("firstname", person.getFirstName())
            .add("lastname", person.getLastName()));
    }
    jsonArray.build();
    return jsonArray;
}

谢谢。看来这是唯一的方法。 - user2824073

1

如果有人对如何使用Java 8 Streams进行此操作感兴趣。相同的代码片段:

public JsonArray createJsonArrayFromList(List<Person> list) {
    JsonArray jsonArray = Json.createArrayBuilder();
    list.stream().forEach(person -> jsonArray.add(Json.createObjectBuilder()
            .add("firstname", person.getFirstName())
            .add("lastname", person.getLastName())));
    jsonArray.build();
    return jsonArray;
}

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