Как получить истинное значение NULL вместо значения JSONObject.NULL при разборе JSON в grails

Я пытаюсь разобрать 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

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

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

Ответ 2

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

    JSONObject.NULL.equals(jsonObj.get("key_name"))

Ответ 3

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

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

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

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

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

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