Как построить JSON с помощью JsonBuilder с ключом и значением с тем же именем?
import groovy.json.JsonBuilder
def userId = 12 // some user id obtained from else where.
def json = new JsonBuilder()
def root = json {
    userId userId
}
print json.toString()
 Который выдает ошибку
groovy.lang.MissingMethodException: Нет сигнатуры метода: java.lang.Integer.call() применим для типов аргументов: (java.lang.Integer) значения: [12] Возможные решения: wait(), any(), abs(), wait (long), wait (long, int) и (java.lang.Number)
Цитирование ключа не имеет никакого эффекта. Любая идея, как сделать эту работу.
Редактировать:
 Я хочу, чтобы JSON был похож на { userId: 12 }. Кроме того, почему запись ключа как строки не работает?
long userId = 12   
def json = new JsonBuilder()
def root = json {
    "userId" userId
}
  Приведенный пример - просто фрагмент. Ситуация такова, что у меня много действий контроллера, которые уже имеют различные переменные. Теперь я добавляю часть, в которой я пытаюсь создать строку JSON с различными значениями переменных. Поэтому не очень удобно изменять существующие имена переменных, и если бы я мог создать строку JSON с тем же именем, это было бы более согласованным. Написание методов доступа для всех переменных, которые я хотел, также не является элегантным методом. В настоящее время я использовал другую схему именования, такую как user_id для userId но, опять же, она не соответствует остальным соглашениям, которым я следую. Поэтому я ищу элегантный подход и причину, по которой JsonBuilder ведет себя таким образом.
В случае JavaScript,
var a = 1
JSON.stringify({a: a})    // gives "{"a":1}"
 что является ожидаемым результатом.