如何在grails中解析JSON时获取真正的空值而不是JSONObject.NULL值

时间:2011-10-22 16:08:44

标签: json grails groovy null

我正在尝试使用grails.converters.JSON库在Grails中解析一些JSON。我有一个字段,其中包含字符串或空值。当我解析JSON并获取字段时,空值将作为JSONObject.NULL类型返回。在检查!= null时这不好,因为JSONObject.NULL被评估为非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。

我尝试使用建议here来使用.toString(),但它最终返回字符串值'null'而不是JSONObject.NULL值的实际null。

3 个答案:

答案 0 :(得分:16)

您可能会发现这更有用,更自然

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

答案 1 :(得分:13)

查看:http://grails.1312388.n4.nabble.com/The-groovy-truth-of-JSONObject-Null-td3661040.html

Ian Roberts提到了一个很好的技巧,可以进行空检查:

JSONObject.NULL.metaClass.asBoolean = {-> false} 

答案 2 :(得分:-2)

我认为我找到了一个更好的解决方案,其中包括通过将toString()文件复制到Grails JSONObject.NULL项目中来覆盖JSONObject.java内部类的src/java方法实现然后将实现更改为:

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

在类路径中使用此新类重新启动后,类加载器将使用您的JSONObject类,而不是Grails依赖项中打包的类。

确保将其与原始包装放在同一个包装中。

有关详情,请访问:https://github.com/grails/grails-core/issues/9129

希望它有所帮助: - )