Как получить набор ключей из строки в заводной? - PullRequest
0 голосов
/ 29 августа 2018

У меня есть следующая строка в Groovy:

[[{"qunit":{"total":0,"passed":0,"failed":0,"skipped":0}}], [{"utest": {"total":0,"passed":0,"failed":0,"skipped":0}}]]

Мне нужно получить только ключи 'qunit' и 'utest'

Как это возможно?

Ответы [ 2 ]

0 голосов
/ 29 августа 2018

Ваша строка представляет собой документ 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)

Если вы напечатаете переменную list, вы увидите что-то вроде этого:

[[[qunit:[total:0, passed:0, failed:0, skipped:0]]], [[utest:[total:0, passed:0, failed:0, skipped:0]]]]

Во-первых, нам нужно сгладить список:

list.flatten()

, который возвращает список вроде:

[[qunit:[total:0, passed:0, failed:0, skipped:0]], [utest:[total:0, passed:0, failed:0, skipped:0]]]

Сведение начального списка дает List<Map<String, Object>>. Мы можем использовать оператор распространения * для выполнения метода keySet() на каждой карте, хранящейся в списке:

list.flatten()*.keySet()

Эта часть кода создает список типа List<List<String>>, например:

[[qunit], [utest]]

Наконец, мы можем преобразовать его в List<String>, вызвав в конце flatten(), например:

list.flatten()*.keySet().flatten()

После применения последней операции мы получаем список вроде:

[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']
0 голосов
/ 29 августа 2018

Вы можете проанализировать эту строку 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()

Результат [qunit, utest]

Это, очевидно, характерно для схемы ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...