Swift中如何遍历JSON响应里嵌套的message对象内的数组?
如何从JSON响应中提取错误消息数组?
首先看一下你拿到的JSON响应结构:
{ "success": false, "message": { "gender": [ "The gender field is required." ], "sms_token": [ "The sms token field is required." ] } }
你之前的代码问题出在对message类型的判断错误——它不是String,而是一个字典([String: [String]]),每个键对应一个字符串数组(每个字段可能有多个错误提示)。直接把它转成String肯定会失败,而且你还跳过了解析message字典的步骤就直接取sms_token,这自然拿不到正确的数据。
给你几个可行的处理方案,根据你的需求选就行:
方案1:遍历所有错误字段和消息
如果需要把所有错误都展示出来,这种方式最全面:
// 先把message解析成键为字段名、值为错误数组的字典 guard let errorDict = receivedTodo["message"] as? [String: [String]] else { print("Could not get messages from JSON") return } // 遍历每个字段对应的错误列表 for (fieldName, errorList) in errorDict { print("字段 \(fieldName) 的错误:") for errorMsg in errorList { print("- \(errorMsg)") } }
方案2:获取特定字段的错误
如果只关心某个字段(比如sms_token)的错误,可以直接通过键取值:
guard let errorDict = receivedTodo["message"] as? [String: [String]] else { print("Could not get messages from JSON") return } // 取出sms_token对应的错误数组 if let smsTokenErrors = errorDict["sms_token"] { for error in smsTokenErrors { print("短信验证码错误:\(error)") } }
方案3:合并所有错误成一个数组
如果想把所有错误消息合并成一个一维数组统一处理,可以用flatMap:
guard let errorDict = receivedTodo["message"] as? [String: [String]] else { print("Could not get messages from JSON") return } // 把所有嵌套的错误数组合并成一个数组 let allErrorMessages = errorDict.values.flatMap { $0 } print("所有错误:\(allErrorMessages)")
核心要点就是先把message正确解析成[String: [String]]类型,再根据需求处理里面的数组——因为每个字段可能返回多个错误提示,所以一定要用数组类型来接收,不能直接转成单个String哦。
内容的提问来源于stack exchange,提问作者Lama
相关产品推荐
相关产品推荐

