Ответ 1
Способ создания объекта JSON довольно неясен. Мне нравится делать JSON-ответы в grails, создавая карту или список в groovy, а затем используйте метод render
, чтобы преобразовать его в JSON.
Выполнение преобразования rowResult
внутри метода рендеринга делает его довольно запутанным, я бы предпочел пойти на что-то вроде этого
def results = db.rows(query).collect { rowResult ->
b(rowResult.name, c, d)
}
render(contentType: 'text/json') {[
'results': results,
'status': results ? "OK" : "Nothing present"
]}
Я думаю, что это более читаемо и даже короче. Этот фрагмент даст вам желаемый результат: нет объектов внутри массива results
, только строки.
Обратите внимание на использование rows
, который возвращает список RowResult, исключая необходимость его получения из ResultSet. Список используется для сбора преобразованного значения a
, вызывая b
для каждого имени строки. Сбор элементов не подразумевает создание карты (например, в { "A":"value1"}
JSON, которую вы получали), то же самое @will-buck, достигнутое с помощью оператора <<
в новом пустом списке.
Все, что мы делаем с методом render, объявляет тип содержимого text/json
и передаёт ему литеральную карту, содержащую ключи results
и status
, которые вы хотите записать в ответ. Условный оператор используется для краткого определения статуса. Его также можно было бы использовать, например, с помощью конвертера JSON @will-buck также упомянули:
def responseData = [
'results': results,
'status': results ? "OK" : "Nothing present"
]
render responseData as JSON