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

Swift 4如何获取嵌套JSONObject的值?FCM推送payload中post_id获取问题

获取FCM推送payload数组中的post_id解决方案

嘿,我明白你现在的困境——已经能从FCM的userInfo里拿到data里的基础字段,但卡在了取数组里的post_id上。别担心,这其实就是个类型强转和数组访问的问题,我给你一步步拆解:

首先,先确认下你的data字段的JSON结构大概是这样的对吧?

{
  "title": "新帖子通知",
  "message": "你关注的用户发布了新内容",
  "timestamp": "1699999999",
  "payload": [
    {
      "post_id": "12345"
    }
  ]
}

接下来是具体的Swift代码实现,我会用安全的可选值绑定来避免崩溃:

// 假设你已经从userInfo里拿到了data
if let dataDict = userInfo["data"] as? [String: Any] {
    // 先取出payload数组,注意要转成[[String: Any]]类型(数组元素是字典)
    if let payloadArray = dataDict["payload"] as? [[String: Any]] {
        // 因为payload是数组,我们取第一个元素(如果数组不为空的话)
        if let firstPayload = payloadArray.first {
            // 最后取出post_id,根据实际类型选择转成String或者Int
            if let postId = firstPayload["post_id"] as? String {
                print("拿到post_id啦:\(postId)")
                // 这里就可以用postId做后续处理了
            } else if let postIdInt = firstPayload["post_id"] as? Int {
                print("数字类型的post_id:\(postIdInt)")
            }
        } else {
            print("payload数组是空的哦")
        }
    } else {
        print("payload不是预期的数组类型")
    }
}

几个需要注意的点:

  • 一定要做类型强转的安全判断,直接强制解包(!)很容易导致崩溃,尤其是推送内容可能有变动的情况;
  • 如果payload数组里可能有多个元素,你需要根据业务逻辑决定是取第一个还是遍历整个数组;
  • 确认post_id的实际类型——是字符串还是整数,别转错了类型导致拿不到值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:57:30