Java 如何将JsonString的JsonArray转换为字符串列表
这个问题的范围是JSON处理的JavaAPI(JSR353) 给定一个元素为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
列表
或集合
?对于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的解决方案更好!:)