我正在尝试使用grails.converters.JSON库解析Grails中的一些JSON。我有一个字段,它将包含一个字符串或一个空值。当我解析JSON并获取字段时,null值返回为JSONObject.NULL类型。当检查!= null时,这是不好的,因为JSONObject.NULL被计算为非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。
发布于 2011-10-24 05:32:44
看看:http://grails.1312388.n4.nabble.com/The-groovy-truth-of-JSONObject-Null-td3661040.html
Ian Roberts提到了一个使null检查成为可能的好技巧:
JSONObject.NULL.metaClass.asBoolean = {-> false} 发布于 2012-06-19 19:56:23
你可能会发现这更有用,更自然
JSONObject.NULL.equals(jsonObj.get("key_name"))发布于 2015-07-24 12:57:33
我想我找到了一个更好的解决方案,那就是通过将JSONObject.java文件复制到Grails src/java项目中来覆盖JSONObject.NULL内部类的toString()方法实现,然后将实现更改为:
/**
* Get the "" string value.
* @return An empty String "".
*/
@Override
public String toString() {
return "";
}在类路径中使用这个新类重新启动后,类加载器将使用您的JSONObject类,而不是打包在Grails依赖项中的类。
请确保将其放在与原始文件相同的包中。
有关更多详细信息,请访问此处:https://github.com/grails/grails-core/issues/9129
希望它能有所帮助:-)
https://stackoverflow.com/questions/7860781
复制相似问题