I've just taken another look at your question and hopefully the following code is a little clearer, I was a bit rushed previously.
Note: It assumes that you have already defined the variable jsonData as per the above example.
def rootNode = new JsonSlurper().parseText(jsonData)
// Example of how to obtain a single known category
def specificCategory = rootNode._embedded.categories.find{ it.name == 'Colour' }
log.info('Category "' + specificCategory.name + '" has ' + specificCategory.options.size() + ' options.' )
log.info('_____________')
log.info(' ')
// Example of how to loop through each category
rootNode._embedded.categories.each() {category ->
log.info('The Category "' + category.name + '" has ' + category.options.size() + ' options.' )
category.options.each(){option ->
log.info(' - ' + option.value)
}
}