Как сказать 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

Другие вопросы по тегам