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

如何优雅解码API返回的空JSON对象?

规范处理API返回的空JSON对象

你当前直接比对原始Data的方式不够灵活(比如服务器返回带空格的{ }就会失效),推荐两种更规范的处理方式:

方式一:解码为字典判断空值

直接将响应数据解码成[String: Any]类型,通过判断字典是否为空来识别空JSON对象,JSONDecoder会自动忽略JSON中的空白字符(包括换行、空格),无需额外处理{}\n这类变体:

let (data, response) = try await URLSession.shared.data(for: request)

// 先尝试解码为空字典
do {
    let emptyDict = try JSONSerialization.jsonObject(with: data) as? [String: Any]
    if emptyDict?.isEmpty == true {
        print("empty json response")
        return nil
    }
} catch {
    // 不是空字典,继续解码预期类型
}

// 解码预期数据
let decoded = try JSONDecoder().decode(YourExpectedType.self, from: data)

方式二:自定义空响应类型(类型更安全)

定义一个仅表示空JSON对象的Decodable类型,先尝试解码该类型,成功则说明是空响应,失败再解码预期数据:

// 自定义空响应类型
struct EmptyResponse: Decodable {}

let (data, response) = try await URLSession.shared.data(for: request)

// 先尝试解码空响应
do {
    _ = try JSONDecoder().decode(EmptyResponse.self, from: data)
    print("empty json response")
    return nil
} catch {
    // 解码失败,说明不是空响应,解码预期类型
    let decoded = try JSONDecoder().decode(YourExpectedType.self, from: data)
    // 处理解码后的数据
}

为什么这两种方式更好?

  • 无需硬编码匹配特定的Data或字符串,能兼容服务器返回的各种空白字符变体(比如{ }、{}\r\n等)
  • 符合JSON解码的规范流程,避免直接操作原始数据的潜在问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:41:08