You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在org.json JSONObject中排除null值并返回所有非空值?

提取org.json中社交媒体数据的非空值

你想到的遍历思路完全靠谱!这确实是处理这种动态null值场景最直接的方案,毕竟API返回的null位置和数量都不固定,遍历能覆盖所有情况。结合Java 17和最新版org.json库,我给你整理了具体的实现代码:

步骤1:获取社交媒体的JSONObject

首先从API返回的总JSON中拿到socialMedias对象:

// 假设apiResponseString是你从API获取的JSON字符串
JSONObject apiResponse = new JSONObject(apiResponseString);
JSONObject socialMedias = apiResponse.getJSONObject("socialMedias");

步骤2:遍历并过滤非空值

根据你的需求,有两种常见的处理方式:

方式1:保留平台名称和对应URL(键值对)

如果需要知道每个URL对应的平台,可以用Map来存储:

Map<String, String> nonEmptySocialAccounts = new HashMap<>();

// 遍历所有平台键
Iterator<String> platformIterator = socialMedias.keys();
while (platformIterator.hasNext()) {
    String platform = platformIterator.next();
    Object value = socialMedias.get(platform);
    // 校验值不为null且是字符串类型(避免非URL的异常值)
    if (value != null && value instanceof String) {
        nonEmptySocialAccounts.put(platform, (String) value);
    }
}

方式2:只收集非空URL列表

如果只需要URL集合,不需要平台信息,用List就够了:

List<String> validSocialUrls = new ArrayList<>();

Iterator<String> platformIterator = socialMedias.keys();
while (platformIterator.hasNext()) {
    String platform = platformIterator.next();
    Object value = socialMedias.get(platform);
    if (value != null && value instanceof String) {
        validSocialUrls.add((String) value);
    }
}

额外说明

  • 加入instanceof String校验是为了保险:虽然API返回的非null值都是URL字符串,但万一出现其他类型的非null值(比如数字、布尔值),这个校验能避免类型转换错误。
  • 如果所有字段都是null,上面的集合会是空的,完全符合预期。
  • 这个方法不管有多少个null值,不管它们在哪个位置,都能准确过滤出所有有效的社交媒体链接。

内容的提问来源于stack exchange,提问作者InsertIGN

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 22:28:13