json - 带有数组元素的 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
解决方案
您可以使用元素方法迭代数组项。您只需要转换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)
推荐阅读
- c# - 安装 Npgsql 失败(Visual Studio 代码)
- php - PHP中的递归函数问题在广度上去新孩子时会覆盖结果
- c# - 可以通过 GSM 模块读取消息的 MVC ASP.Net 应用程序?
- macos - plaidml-setup 使用错误的库路径并获取 OSErrors
- .net - .editorconfig 中的 pascal_case 和 first_word_upper 有什么区别
- python - Python:预处理数据以挖掘关联规则和频繁项集(apriori/SPADE)
- linux - 与 ifconfig 命令相比,ip addr 命令在为接口分配 IP 时设置了不正确的子网掩码
- c# - 新手和数据 SQL 数据库
- vim - vim 以不同于 `hlsearch` 的方式突出显示当前出现的搜索模式,以帮助快速找到光标位置
- excel - 将 Excel Windows 大小更改为屏幕的一半