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

标签 java json

此问题的范围为用于 JSON 处理的 Java API (JSR 353)。

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

假设我有一个像这样的 JSON 对象:

{
  "name" : "James Johns",
  "street" : "22 Nancy St.",
  "emails" : [
               "james@a.com",
               "james@b.net",
               null,
               ""
             ]
}

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

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

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

我一直被 JsonValue 和 JsonString 所困扰,并试图获取实际的 String 值。如果我使用JsonValue.toString()JsonString.toString()方法,我得到包含双引号的字符串值,就好像原始 JSON 是 "\"james@a.com\"" 。我需要字符串值是等效的 JSON 值 "james@a.com" .

最佳答案

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

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

  • ofNullable/orElse组合保证我得到一个 JsonArray,即使该数组是空的,从而避免任何空指针异常的考虑。
  • getValuesAs(JsonString::getString)是一个 JsonArray 方法,它通过应用 JsonString.getString() 返回一个 List方法到每个返回的 JsonString。 JsonString.getString()方法返回字符串值“james@a.com”,而不是 JsonString.toString() 的“\”james@a.com\”值。方法返回。
  • stream()方法将集合转换为顺序流,我们可以使用它来过滤和收集原始集合的成员。
  • filter()方法应用谓词 email -> email!=null && !email.isEmpty()对于流中的每个条目,丢弃任何空条目或空字符串条目。
  • 最后,collect()方法将过滤后的条目收集到指定的集合类型中。

获取Set<String> ,更改 .collect()使用:

.collect(Collectors.toSet())

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

关于java - 如何将 JsonString 的 JsonArray 转换为字符串列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59200061/

相关文章:

java - 我生成数组元素的所有组合的函数有什么错误?

java - Selenium Webdriver Java - 在执行拖放时寻找 Actions 和 Robot 的替代方案

php - 拉拉维尔 : Query to get a single column in response from a JSON column in mysql 5. 7

json解码嵌入式结构

jquery - 返回 xml 字符串 - 如何使用 JQuery/Json 解析 xml 文件

java - google web takeit with google plugin for eclipse v3.8.0 无法调试

java - 特定于 webkit 的 css 选择器不起作用

java - 将 Log4J 查看器(链锯)连接到 MySql 数据库

javascript - Chrome 扩展程序弹出窗口未显示?

JSON 数据的 JavaScript SUM 和 GROUP BY