首页 > 解决方案 > 如何在 JSONObject 中返回除“null”值之外的所有值?

问题描述

让我提供一些背景信息:

我有一个 org.json JSONObject,它具有这个 JSON 对象的所有值,取自 API。

"socialMedias" : {
    "TWITTER" : "[twitter url]",
    "YOUTUBE" : "[youtube url]",
    "INSTAGRAM" : "[instagram url]",
    "FACEBOOK" : null,
    "VIMEO" : "[vimeo url]",
    "LINKEDIN" : "[linkedin url]"
}

然而,问题是,在对 API 的这些调用之一中,只有一个值为 null,但相同的值并不总是为 null,并且可以有多个值为 null 的值;让我说明一下我的意思:

"socialMedias" : {
    "TWITTER" : "[twitter url]",
    "YOUTUBE" : null,
    "INSTAGRAM" : null,
    "FACEBOOK" : "[facebook url]",
    "VIMEO" : "[vimeo url]",
    "LINKEDIN" : "[linkedin url]"
}

以上是 API 可以返回的内容。另一个:

"socialMedias" : {
    "TWITTER" : null,
    "YOUTUBE" : null,
    "INSTAGRAM" : null,
    "FACEBOOK" : null,
    "VIMEO" : null,
    "LINKEDIN" : null
}

从字面上看,JSONObject 中的每个值都可以为空!

回到问题:我如何能够检查 JSONObject 的哪些值为 null,并且只返回那些不为 null 的值;因此,对于我拥有的第一个代码块,代码将返回TWITTER, YOUTUBE, INSTAGRAM, VIMEOLINKEDINURL,并排除FACEBOOK, 一个,因为那个的值为空。

此 API 返回用户已链接到其帐户的社交媒体的 JSONObject,如果用户未添加值(如果不清楚),则返回 null。

我正在使用最新版本的org.json库在 Java 17 中执行此操作。在此先感谢您的帮助,不胜感激!

标签: javajsonmavenorg.jsonjava-17

解决方案


    JSONObject socialMedias = new JSONObject(apiResponse).getJSONObject("socialMedias");
    JSONArray socialMediaArray = socialMedias.toJSONArray(socialMedias.names());
    socialMediaArray.toList().stream().filter(v -> v != null);

推荐阅读