当前位置: 首页 > 知识库问答 >
问题:

Groovy:我如何用key的值搜索json并在Groovy中找到它的子项

西门安民
2023-03-14
[
{
    "createTime": "2014-05-12 04:51:46.513343",
    "powered": false,
    "description": "s",
    "current": false,
    "children": [
        {
            "createTime": "2014-05-13 03:50:43.050442",
            "powered": false,
            "description": "Snapshot description",
            "current": false,
            "children": [
                {
                    "createTime": "2014-05-13 03:57:08.209319",
                    "powered": false,
                    "description": "s",
                    "current": false,
                    "children": [
                        {
                            "createTime": "2014-05-13 04:27:00.646064",
                            "powered": false,
                            "description": "s",
                            "current": false,
                            "label": "snap3"
                        },
                        {
                            "createTime": "2014-05-13 21:00:16.374178",
                            "powered": false,
                            "description": "sd",
                            "current": false,
                            "label": "sddsds"
                        }
                    ],
                    "label": "snap2"
                }
            ],
            "label": "snapshot-name5"
        },
        {
            "createTime": "2014-05-14 00:49:33.415858",
            "powered": false,
            "description": "a",
            "current": false,
            "children": [
                {
                    "createTime": "2014-05-14 02:35:10.076829",
                    "powered": false,
                    "description": "sdfsdfsdf",
                    "current": true,
                    "label": "ssfsdf"
                }
            ],
            "label": "assa"
        }
    ],
    "label": "snap1"
}
]

这里我有标签“snap2”作为输入,我需要得到它的子标签(snap3,sddsds)作为输出..我如何用groovy实现它?我搜索了很多东西,但是我不能找到一个解决方案..

如果我能得到你们任何一个人的建议,那就太好了。

共有2个答案

缪升
2023-03-14
find_recursive(new groovy.json.JsonSlurper().parseText(your_json_here))

def find_recursive(a) {
    a.collect {(it.label == "snap2") ? it.children.collect {it.label} : find_recursive(it.children) }.flatten()
}
慕凌龙
2023-03-14

假设你的 json 在字符串 jsonTxt 中,你可以执行以下操作:

def json = ​new groovy.json.JsonSlurper().parseText( jsonTxt )

def recursiveChildrenScan( map, key, value ) {
    if( !map ) { null }
    else if( map[ key ] == value ) { map.children }
    else { map.children.findResult { recursiveChildrenScan( it, key, value ) } }
}

println json.findResult { recursiveChildrenScan( it, 'label', 'snap2' ) }​?.label​
 类似资料:
  • 问题内容: 在这里,我将标签’snap2’作为输入,并且需要获取其子级标签(snap3,sddsds)作为输出。如何在Groovy中做到这一点?我搜索了很多东西,但找不到解决方案。 如果我能从你们中得到任何建议,那就太好了。 问题答案: 假设您的json在String中,则可以执行以下操作:

  • 在阅读了许多文章之后,我被困在这个非常简单的任务上。 我有一个只有两个文件的沙盒项目: src/main/groovy/classes/foo 和src/main/groovy/脚本/script.groovy 现在,如果我运行命令: 我得到以下错误: 如何在我的脚本script.groovy中使用我的类Foo?

  • 问题内容: 我有这个代码 如何搜索? 问题答案: 正如简单地返回一个字典一样,您可以使用适用于字典的运算符: 编辑:要给出有关如何遍历数据的想法,请考虑以下示例: 检查数据结构将使您可以根据需要进行导航。您已经拥有的电话就是一个很好的起点。 Edit2:另一个尝试。这将获得您在词典列表中提到的文件。这样,我认为您应该能够使其适应您的需求。 然后 “在其中搜索”,执行以下操作:

  • 我将一个jenkinsfile放到项目的根目录中,并希望为我的管道引入一个groovy文件并执行它。我能够实现这一点的唯一方法是创建一个单独的项目并使用文件加载器。fromGit命令。我想做

  • 问题内容: 我想解析传入的JSON数据,例如: 我使用的代码是: 但是我无法分配任何东西给。有什么建议? 问题答案: 该响应是一个Map,具有单个元素,键为“ 212315952136472”。地图中没有“数据”键。如果要遍历所有条目,请使用以下命令: 如果您知道它是单元素地图,则可以直接访问: 而且,如果您知道ID(例如,如果您使用它来发出请求),则可以更简洁地访问该值:

  • 问题内容: 我有一个下面的JSON字符串,我想在JSON字符串中查找/搜索条件。 1)。查找存在的键数。2)。获取给定键的值(如果有数组) 我正在寻找类似Groovy GPath语法的解决方案 store.book-此数组的大小。 store.book [*]。category-如何对数组中存在的键进行计时。 store.bicycle-如果发现它必须返回真实值 问题答案: 您还可以使用REST

  • 我正在Activiti中加载一个具有以下结构的Groovy项目: 剧本groovy公司 傅。groovy公司 我的问题是我的脚本的导入语句:没有被Activiti解决。 我正在Spring容器中使用org运行Activiti。activiti:activiti spring:5.21.0。我的脚本使用org中的groovy脚本引擎进行评估。activiti引擎:5.21.0。 如何让Activit

  • 我在eclipse中编写了一个工作的Groovy脚本,但当从命令行调用时,它会抛出错误消息:Provider for javax.xml.parsers.DocumentBuilderFactory不能找到 错误是由Fillo抛出的,Fillo是一个用于解析xlsx文件的库。问题似乎仍然是一般的,因为我发现了很多包含错误消息的页面: 在Java/Maven中处理“Xerces地狱”? 处理依赖项解