我正在尝试使用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。
答案 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
希望它有所帮助: - )