net.sf.JSONObject - 如何故意将字符串"null"作为值写入

Kat*_*314 6 java json

让我们假设以下理论情况:一个webapp描述了北极的奇怪生物,包括一个奇怪的长鼻子生物,如食蚁兽吃北极青蛙,爱斯基摩人称之为"nh-oo-l",或更常见的,"空".

在将关于此生物的数据写入webapp时,我们写下以下行:

net.sf.json.JSONObject creatureJson = new JSONObject();
creatureJson.element("name", "null");
Run Code Online (Sandbox Code Playgroud)

但是,这会在值解析器中遇到问题:

在net.sf.json.AbstractJSON中:

protected Object _processValue( Object value, JsonConfig jsonConfig ) {
if( JSONNull.getInstance().equals( value ) ) {
     return JSONNull.getInstance();
...
Run Code Online (Sandbox Code Playgroud)

在net.sf.json.JSONNull中:

public boolean equals( Object object ) {
  return object == null || object == this || object == instance
        || (object instanceof JSONObject && ((JSONObject) object).isNullObject())
        || "null".equals( object );
}
Run Code Online (Sandbox Code Playgroud)

因此,结果是,即使我们实际上想要使用"null"作为我们的值(我们也不希望返回值必须处理实际的空值),它将作为JSONNull返回,并得到打印作为{"name": null}.

我一直在尝试搜索net.sf.json的文档和配置选项以解决这个问题,但所有的行为似乎都是硬编码的.我的理解是这是一个非常常见的库.如何以这种方式运作?

注意:要清楚,这是针对创建 JSON而不是解析的情况.有一个类似的问题不能解析JSON属性"null",但问题是用户试图使用单引号进行解析; 根本问题与null完全无关.