是否可以使用 JSONLib 从 getString 获取 null

发布于 2024-10-31 11:15:06 字数 401 浏览 0 评论 0原文

我正在使用 JSON-lib 解析对象并从中读取字符串。这对于有效字符串来说效果很好,但也可以为空。例如:

JSONObject jsonObject = JSONObject.fromObject("{\"foo\":null}");
String str = jsonObject.getString("foo");

在本例中,我希望 strnull,但实际上是 "null"。调用任何其他方法似乎都会引发错误。如果值为字符串,是否可以让 JSONLib 解析字符串,但如果值为 null,则返回 null?

I'm using JSON-lib to parse an object and read a string from it. This works fine for a valid string but it can also be null. For example:

JSONObject jsonObject = JSONObject.fromObject("{\"foo\":null}");
String str = jsonObject.getString("foo");

In this case I would expect str to be null but it is instead "null". Calling any other method seems to throw an error. Is there anyway to have JSONLib parse a string if the value is a string but return null if the value is null?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

勿忘心安 2024-11-07 11:15:06

JSONObject.java:

/**
* Get the string associated with a key.
*
* @param key A key string.
* @return A string which is the value.
* @throws JSONException if the key is not found.
*/
public String getString( String key ) {
    verifyIsNull();
    Object o = get( key );
    if( o != null ){
        return o.toString();
    }
    throw new JSONException( "JSONObject[" + JSONUtils.quote( key ) + "] not found." );
}

您可以看到 getString() 永远不会返回 null。如果 o.toString() 这样做,它可以返回“null”,但这将是 String 而不是 null 值

JSONObject.java:

/**
* Get the string associated with a key.
*
* @param key A key string.
* @return A string which is the value.
* @throws JSONException if the key is not found.
*/
public String getString( String key ) {
    verifyIsNull();
    Object o = get( key );
    if( o != null ){
        return o.toString();
    }
    throw new JSONException( "JSONObject[" + JSONUtils.quote( key ) + "] not found." );
}

You can see that getString() never return null. It can return "null" if o.toString() do that but this will be String not null value

゛清羽墨安 2024-11-07 11:15:06

我找不到一个好的方法来做到这一点,所以我确实切换到 Jackson 。这允许我执行以下操作:

JsonNode json = (new ObjectMapper()).readValue("{\"foo\":null}", JsonNode.class);
json.get("stopType").getTextValue();

正如预期的那样,此示例将返回 null 。

I couldn't find a nice way to do this, so I did switch to Jackson instead. This allows me to do:

JsonNode json = (new ObjectMapper()).readValue("{\"foo\":null}", JsonNode.class);
json.get("stopType").getTextValue();

Which will return null for this example, as expected.

月隐月明月朦胧 2024-11-07 11:15:06

这是已报告的 JSONLib 的一个错误。

https://github.com/douglascrockford/JSON-java/issues/5

将 jsonlib 升级到最新版本可能会修复它。

It's a bug of JSONLib which has been reported .

https://github.com/douglascrockford/JSON-java/issues/5

Upgrading your jsonlib to latest version will probably fix it.

凉城凉梦凉人心 2024-11-07 11:15:06

为什么不使用 JSONObject::opt 呢?如果该键不存在,您将得到一个 null(不是“null”)。

String str = (String) jsonObject.opt("foo");

Why not make use of JSONObject::opt? You'll get a null (not "null") if the key doesn't exist.

String str = (String) jsonObject.opt("foo");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文