Java 如何将JsonString的JsonArray转换为字符串列表

Java 如何将JsonString的JsonArray转换为字符串列表,java,json,Java,Json,这个问题的范围是JSON处理的JavaAPI(JSR353) 给定一个元素为JsonString的JsonArray,如何轻松地将其转换为列表或集合?对于Set,我们假设JsonArray包含一个唯一的字符串值集合 假设我有一个JSON对象,如下所示: { "name" : "James Johns", "street" : "22 Nancy St.", "emails" : [ "james@a.com", "james

这个问题的范围是JSON处理的JavaAPI(JSR353)

给定一个元素为JsonString的JsonArray,如何轻松地将其转换为
列表
集合
?对于
Set
,我们假设JsonArray包含一个唯一的字符串值集合

假设我有一个JSON对象,如下所示:

{
  "name" : "James Johns",
  "street" : "22 Nancy St.",
  "emails" : [
               "james@a.com",
               "james@b.net",
               null,
               ""
             ]
}
JsonObject person = <parse the JSON input>;

List<String> emailList = 
    Optional.ofNullable(person.getJsonArray("emails"))
            .orElse(JsonValue.EMPTY_JSON_ARRAY) // Use an empty list if the property's value was null
            .getValuesAs(JsonString::getString) // Get each JsonString entry as String
            .stream()                           // Turn the collection into a stream for filter/collect
            .filter(email -> email!=null && !email.isEmpty())  // Exclude any null/empty entries
            .collect(Collectors.toList());                     // Create the List

我希望生成的集合忽略电子邮件数组中的任何null或空字符串条目

假设已经创建了我的JsonObject实例

JsonObject person = <parse the JSON input>;
JsonArray emails = person.get("emails");
jsonobjectperson=;
JsonArray emails=person.get(“emails”);

我一直被JsonValue和JsonString难住,试图得到实际的字符串值。如果我使用
JsonValue.toString()
JsonString.toString()
方法,我会得到包含双引号的字符串值,就像原始JSON是
“\”james@a.com\“”
。我需要字符串值是等效的JSON值
”james@a.com“

使用Java 8,可以轻松地将JsonString的JsonArray转换为如下列表:

{
  "name" : "James Johns",
  "street" : "22 Nancy St.",
  "emails" : [
               "james@a.com",
               "james@b.net",
               null,
               ""
             ]
}
JsonObject person = <parse the JSON input>;

List<String> emailList = 
    Optional.ofNullable(person.getJsonArray("emails"))
            .orElse(JsonValue.EMPTY_JSON_ARRAY) // Use an empty list if the property's value was null
            .getValuesAs(JsonString::getString) // Get each JsonString entry as String
            .stream()                           // Turn the collection into a stream for filter/collect
            .filter(email -> email!=null && !email.isEmpty())  // Exclude any null/empty entries
            .collect(Collectors.toList());                     // Create the List


一旦您习惯了Java 8机制,这种方法提供了一种简洁的,易于阅读和理解的操作集合的技术,无需更复杂的null/empty检查和for循环使用方法。

您的问题的可能答案:。您是否同意我描述的Java8技术更干净、更容易理解,必须对数组进行null检查,然后使用蛮力循环索引?事实证明,提供的答案与我的答案类似,但它在列表中的位置非常靠后。我创建这个帖子是希望它能帮助新的查询。我花了很长时间寻找解决方案,但始终没有找到您链接的解决方案。谢谢你的评论@LHCHINHi,我只是为你的问题提供了一个可能的解决方案,而不是回答你的回答。我也同意Java8的解决方案更好!:)