如何在groovy中从字符串获取密钥集?

如何在groovy中从字符串获取密钥集?,groovy,Groovy,我在Groovy中有以下字符串: [[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]] 我只需要“qunit”和“utest”两个键 怎么可能呢?您可以解析该JSON字符串,然后阅读列表: def p = new JsonSlurper() def list = p.parseText("""[[{"

我在Groovy中有以下字符串:

[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]
我只需要“qunit”和“utest”两个键


怎么可能呢?

您可以解析该JSON字符串,然后阅读列表:

def p = new JsonSlurper()
def list = 
    p.parseText("""[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], 
                   [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]""")

def keys = list.flatten().collect{it.keySet()}.flatten()
list.flatten()
list.flatten()*.keySet()
结果是
[qunit,utest]


这显然是特定于输入布局的。

您可以解析该JSON字符串,然后读取列表:

def p = new JsonSlurper()
def list = 
    p.parseText("""[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], 
                   [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]""")

def keys = list.flatten().collect{it.keySet()}.flatten()
list.flatten()
list.flatten()*.keySet()
结果是
[qunit,utest]


这显然是特定于输入布局的。

您的字符串表示一个JSON文档,因此您需要首先使用
JsonSlurper
对其进行解析:

import groovy.json.JsonSlurper

final String json = '[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]'

def list = new JsonSlurper().parseText(json)
如果打印
列表
变量,您将看到如下内容:

[[[qunit:[total:0, passed:0, failed:0, skipped:0]]], [[utest:[total:0, passed:0, failed:0, skipped:0]]]]
首先,我们需要将列表展平:

def p = new JsonSlurper()
def list = 
    p.parseText("""[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], 
                   [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]""")

def keys = list.flatten().collect{it.keySet()}.flatten()
list.flatten()
list.flatten()*.keySet()
返回如下列表:

[[qunit:[total:0, passed:0, failed:0, skipped:0]], [utest:[total:0, passed:0, failed:0, skipped:0]]]
[qunit, utest]
平铺初始列表将生成
列表
。我们可以使用扩展运算符
*
对列表中存储的每个映射执行
keySet()
方法:

def p = new JsonSlurper()
def list = 
    p.parseText("""[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], 
                   [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]""")

def keys = list.flatten().collect{it.keySet()}.flatten()
list.flatten()
list.flatten()*.keySet()
这部分代码生成一个
list
类型的列表,如:

[[qunit], [utest]]
最后,我们可以通过最后调用
flant()
将其转换为
List
,如下所示:

list.flatten()*.keySet().flatten()
应用最后一个操作后,我们得到如下列表:

[[qunit:[total:0, passed:0, failed:0, skipped:0]], [utest:[total:0, passed:0, failed:0, skipped:0]]]
[qunit, utest]
下面是一个完整的例子:

import groovy.json.JsonSlurper

final String json = '[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]'

def list = new JsonSlurper().parseText(json)

def keys = list.flatten()*.keySet().flatten()

assert keys == ['qunit', 'utest']

您的字符串表示一个JSON文档,因此需要首先使用
JsonSlurper
对其进行解析:

import groovy.json.JsonSlurper

final String json = '[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]'

def list = new JsonSlurper().parseText(json)
如果打印
列表
变量,您将看到如下内容:

[[[qunit:[total:0, passed:0, failed:0, skipped:0]]], [[utest:[total:0, passed:0, failed:0, skipped:0]]]]
首先,我们需要将列表展平:

def p = new JsonSlurper()
def list = 
    p.parseText("""[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], 
                   [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]""")

def keys = list.flatten().collect{it.keySet()}.flatten()
list.flatten()
list.flatten()*.keySet()
返回如下列表:

[[qunit:[total:0, passed:0, failed:0, skipped:0]], [utest:[total:0, passed:0, failed:0, skipped:0]]]
[qunit, utest]
平铺初始列表将生成
列表
。我们可以使用扩展运算符
*
对列表中存储的每个映射执行
keySet()
方法:

def p = new JsonSlurper()
def list = 
    p.parseText("""[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], 
                   [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]""")

def keys = list.flatten().collect{it.keySet()}.flatten()
list.flatten()
list.flatten()*.keySet()
这部分代码生成一个
list
类型的列表,如:

[[qunit], [utest]]
最后,我们可以通过最后调用
flant()
将其转换为
List
,如下所示:

list.flatten()*.keySet().flatten()
应用最后一个操作后,我们得到如下列表:

[[qunit:[total:0, passed:0, failed:0, skipped:0]], [utest:[total:0, passed:0, failed:0, skipped:0]]]
[qunit, utest]
下面是一个完整的例子:

import groovy.json.JsonSlurper

final String json = '[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]'

def list = new JsonSlurper().parseText(json)

def keys = list.flatten()*.keySet().flatten()

assert keys == ['qunit', 'utest']