Как построить 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 (долго), 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}"
что и является ожидаемым результатом.
12:12
илиuserId:12
? - person dmahapatro   schedule 07.10.2013userId: 12
. - person   schedule 07.10.2013