【发布时间】:2016-10-11 08:56:36
【问题描述】:
我需要实现一种方法,该方法将扫描 JSON 字符串以查找特定的 targetField,并返回该字段的值(如果存在)或 null(如果不存在):
// Ex: extractFieldValue(/{ "fizz" : "buzz" }/, 'fizz') => 'buzz'
// Ex: extractFieldValue(/{ "fizz" : "buzz" }/, 'foo') => null
String extractFieldValue(String json, String targetField) {
// ...
}
此解决方案必须是递归的,并且可以在(分层)JSON 字符串中的任何嵌套级别上工作。它也需要适用于 JSON 数组。
到目前为止我最好的尝试:
String extractFieldValue(String json, String targetField) {
def slurper = new JsonSlurper()
def jsonMap = slurper.parseText(json)
jsonMap."${targetField}"
}
这仅适用于顶级(非嵌套)JSON 字段。我问谷歌大神如何递归使用JsonSlurper,但找不到任何有用的东西。这里有什么想法吗?
【问题讨论】:
-
如果多个匹配怎么办?
-
相当肯定,当您将 JSON 吞入地图时,您可以使用类似 stackoverflow.com/questions/6185746/groovy-map-find-recursive
-
好点@tim_yates - 我很乐意接受找到的第一个值。
标签: recursion groovy jsonslurper