带有数组元素的 JsonNode

JsonNode with Array elements

节点字段包含一个数组。目前只有一个元素,所以我可以使用 get(0) 获取第一个元素并解析字符串以找到有效的值。

这个解决方案的问题是如果明天会有更多 k:v 添加到数组中,这将失败。我还可以使用任何优雅的方式来解析 valid 的值吗?

  import com.fasterxml.jackson.databind.{JsonNode, ObjectMapper}

  val response = """{"myTable":{"fields":["valid:true"]}}"""
  val mapper = new ObjectMapper()
  val node = mapper.readTree(response)
  val result = node.get("myTable").get("fields").get(0).toString.contains("valid:true")
  println(s"valid=$result")

结果:

valid=true

您可以使用 elements 方法遍历数组项。您只需要将 Iterator 转换为 Stream:

val fieldsValues = node.get("myTable").get("fields").elements()
val value = StreamSupport.stream(Spliterators.spliteratorUnknownSize(fieldsValues, 0), false)
  .filter(item => item.isTextual)
  .map[String]((item: JsonNode) => item.textValue())
  .map[Boolean]((item: String) => item.equals("valid:true"))
  .findAny()
  .orElse(false)