Как получить реальное нулевое значение вместо значения JSONObject.NULL при разборе JSON в Grails - PullRequest
14 голосов
/ 22 октября 2011

Я пытаюсь проанализировать некоторые JSON в Grails, используя библиотеку grails.converters.JSON.У меня есть поле, которое будет содержать либо строку, либо нулевое значение.Когда я анализирую JSON и получаю поле, нулевые значения возвращаются как тип JSONObject.NULL.Это не хорошо при проверке! = Null, поскольку JSONObject.NULL оценивается как ненулевое (не подходит для нулевых проверок)

def obj = JSON.parse('{"date1":null,"date2":"2011-06-26T05:00:00Z"}')
def date1 = obj.date1
if (date1)
     parse(date1)   // parse error occurs here because date1 evaluates true in the if because it is JSONObject.NULL

Есть ли простой способ получить анализ для анализа действительного нулевого значениятак что мне не нужно проверять, является ли объект JSONObject.NULL.

Я попробовал предложение здесь , чтобы использовать .toString (), но в итоге оно вернуло строковое значение'NULL' вместо фактического NULL для значения JSONObject.NULL.

Ответы [ 3 ]

16 голосов
/ 19 июня 2012

Вы можете найти это более полезным и естественным

    JSONObject.NULL.equals(jsonObj.get("key_name"))
13 голосов
/ 24 октября 2011

Взгляните на: http://grails.1312388.n4.nabble.com/The-groovy-truth-of-JSONObject-Null-td3661040.html

Ян Робертс упоминает хороший трюк, чтобы сделать возможной нулевую проверку:

JSONObject.NULL.metaClass.asBoolean = {-> false} 
0 голосов
/ 24 июля 2015

Я думаю, что нашел лучшее решение, которое состоит в переопределении реализации метода toString() внутреннего класса JSONObject.NULL, скопировав файл JSONObject.java в ваш проект Grails src/java и затем изменив реализацию следующим образом:

    /**
     * Get the "" string value.
     * @return An empty String "".
     */
    @Override
    public String toString() {
        return "";
    }

Как только вы перезапустите этот новый класс в вашем classpath, загрузчик классов будет использовать ваш класс JSONObject вместо того, который упакован в зависимостях Grails.

Убедитесь, что вы храните его в той же упаковке, что и оригинал.

Более подробную информацию вы можете получить здесь: https://github.com/grails/grails-core/issues/9129

Надеюсь, это поможет: -)

...