首页 > 解决方案 > 带有数组元素的 JsonNode

问题描述

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

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

  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

标签: jsonscalajackson

解决方案


您可以使用元素方法迭代数组项。您只需要转换IteratorStream

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)

推荐阅读