在grails中解析JSON时如何获取真正的空值而不是JSONObject.NULL值
Posted
技术标签:
【中文标题】在grails中解析JSON时如何获取真正的空值而不是JSONObject.NULL值【英文标题】:how to get a real null value instead of a JSONObject.NULL value when parsing JSON in grails 【发布时间】:2011-12-13 05:33:11 【问题描述】:我正在尝试使用 grails.converters.JSON 库在 Grails 中解析一些 JSON。我有一个包含字符串或空值的字段。当我解析 JSON 并获取该字段时,空值作为 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。
【问题讨论】:
日期字符串缺少右引号。这可能是问题吗? 这是用于说明的示例代码,不是实际运行代码。这是为了说明。我已经更正了引用,但这不是我要说明的问题 【参考方案1】:您可能会发现这更有用和自然
JSONObject.NULL.equals(jsonObj.get("key_name"))
【讨论】:
当我使用JSONObject.NULL.equals(...)
时,我得到了NullPointerException
。在调试器中我看到JSONObject.NULL = null
....
取决于您使用的库,请参阅docs.oracle.com/javaee/7/api/javax/json/JsonValue.html#NULLdeveloper.android.com/reference/org/json/JSONObject.html#NULL【参考方案2】:
看看:http://grails.1312388.n4.nabble.com/The-groovy-truth-of-JSONObject-Null-td3661040.html
Ian Roberts 提到了一个使空检查成为可能的好技巧:
JSONObject.NULL.metaClass.asBoolean = -> false
【讨论】:
请注意,这仍然不允许您使用安全导航运算符?.
,就像使用“真实”地图一样自然。【参考方案3】:
我想我找到了一个更好的解决方案,它包括通过将 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
希望对你有帮助:-)
【讨论】:
以上是关于在grails中解析JSON时如何获取真正的空值而不是JSONObject.NULL值的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS、PHP 和 JSON 中使用来自 SQL Server 的空值
如何将 must_not 与 ElasticSearch + Grails 的空 JSON 属性一起使用?