【问题标题】:JsonNode with Array elements带有数组元素的 JsonNode
【发布时间】:2021-09-29 07:33:51
【问题描述】:

节点字段包含一个数组。目前只有一个元素,所以我可以使用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

【问题讨论】:

  • 如果数组包含多个项目,您期望reult 是什么?你尝试了什么?
  • 结果应该是一样的。我只试过到上面

标签: json scala jackson


【解决方案1】:

您可以使用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)

【讨论】:

  • 谢谢你。但是 .filter(item => item.isTextual) 给出错误。
  • 我添加了这两个库 import java.util.Spliterators import java.util.stream.StreamSupport
猜你喜欢
  • 1970-01-01
  • 2019-01-20
  • 2015-03-26
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 2013-07-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多