Как сказать Grails визуализировать JSONNull как ноль?
У меня есть объект JSON, возвращенный из HTTPBuilder Groovy. JSON содержит некоторые нулевые значения, представленные в виде объектов JSONNull. Проблема в том, что когда я пытаюсь отобразить JSON обратно в ответ, я получаю сообщение об ошибке, когда он пытается отобразить JSONNull. Я получаю ответ только частично. Я хочу, чтобы он отображался как "ноль". Как мне это сделать?
Код:
render(contentType: "text/json") {
listOfJSONObjectsThatIncludeJSONNulls
}
Ошибка:
| Error 2013-09-17 11:33:56,965 [http-bio-8080-exec-4] ERROR errors.GrailsExceptionResolver - JSONException occurred when processing request: [GET] /my/action
Object is null. Stacktrace follows:
Message: Object is null
Line | Method
->> 69 | isEmpty in net.sf.json.JSONNull
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 199 | value in grails.converters.JSON
| 162 | convertAnother in ''
| 199 | value in ''
| 162 | convertAnother in ''
| 199 | value in ''
| 162 | convertAnother in ''
| 199 | value in ''
| 162 | convertAnother in ''
| 199 | value in ''
| 162 | convertAnother in ''
| 199 | value in ''
| 162 | convertAnother in ''
| 199 | value in ''
| 134 | render . . . . in ''
| 150 | render in ''
| 63 | doCall . . . . in myproject.MyController$_index_closure1_closure2_closure4$$EOHirVeS
| 477 | doRequest in groovyx.net.http.HTTPBuilder
| 417 | doRequest . . in ''
| 349 | request in ''
| 43 | doCall . . . . in myproject.MyController$_index_closure1$$EOHirVeS
| 477 | doRequest in groovyx.net.http.HTTPBuilder
| 268 | get . . . . . in ''
| 31 | index in myproject.MyController$$EOHirVeS
| 895 | runTask . . . in java.util.concurrent.ThreadPoolExecutor$Worker
| 918 | run in ''
^ 680 | run . . . . . in java.lang.Thread
Частично предоставленный вывод:
[{"keyWithNullValue":{"array":false,"class":"net.sf.json.JSONNull"
2 ответа
Решение
Я использовал следующий код для визуализации JSONNull в виде пустой строки.
grails.converters.JSON.registerObjectMarshaller(JSONNull, { return "" })
Я думаю, что вы можете это исправить, указав ниже в BootStrap
JSONObject.NULL.metaClass.asBoolean = {-> false}
Посмотрите: как получить реальное нулевое значение вместо значения JSONObject.NULL при разборе JSON в grails