You need to enable JavaScript to run this app. 使用SwiftyJSON解析合法JSON时获取records字段返回null的问题
优惠活动
大模型
产品
解决方案
定价
更多

使用SwiftyJSON解析合法JSON时获取records字段返回null的问题

SwiftyJSON 解析JSON字符串返回null的解决方案

核心问题根源

SwiftyJSON的JSON初始化方法不会隐式处理JSON字符串的解析逻辑。你直接传入字符串给JSON(string)时,框架只会把这段字符串作为普通文本值存储,根本不会执行“字符串转Data、JSON序列化、结构拆解”的完整解析流程。
这种情况下整个JSON的层级结构完全没有被识别,哪怕原字符串格式完全合法,你通过键值路径取records字段时也只会拿到null。

正确修复步骤

  • 第一步:将合法的JSON字符串转换为UTF-8编码的Data二进制数据
  • 第二步:使用转换得到的Data实例初始化SwiftyJSON的JSON对象,框架会自动完成JSON结构的解析
  • 第三步:即可正常通过键路径提取records等字段的值

修复后的参考代码

let jsonString = """
    {"ResponseMetadata": {"RequestId": "b5d6ecad-e050-4d1f-8429-74a2775a6fe9", "HTTPStatusCode": 200, "HTTPHeaders": {"x-amzn-requestid": "b5d6ecad-e050-4d1f-8429-74a2775a6fe9", "content-type": "application/json", "content-length": "271", "date": "Tue, 22 Dec 2020 22:45:17 GMT"}, "RetryAttempts": 0}, "numberOfRecordsUpdated": 0, "records": [[{"stringValue": "6998DFFE-A9CF-4BEA-86AD-C356BB865E27"}, {"stringValue": "david.craine@yahoo.com"}, {"stringValue": "David"}, {"stringValue": "Craine"}, {"stringValue": "dcraine"}, {"stringValue": "vendor1"}, {"stringValue": "vendor1_werw8"}]]}
"""
// 字符串转Data
guard let jsonData = jsonString.data(using: .utf8) else {
    return
}
// 用Data初始化完成JSON解析
let body = JSON(jsonData)
// 正常提取字段
print(">>>>>>>>>> \(body["records"])")

快速排查方法

如果仍存在取值异常,可以打印body.type确认解析状态:

  • 解析逻辑错误时,会输出string类型,说明框架并未识别到JSON结构
  • 解析正常时,会输出dictionary类型,代表整个JSON已经被成功拆解为可访问的键值对结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.12 05:06:06