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