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
相关产品推荐
相关产品推荐

