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