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

解码错误求助:预期Dictionary<String, Any>却得到数组

解决 "Expected to decode Dictionary<String, Any> but found an array instead." 解码错误

这个错误的核心逻辑其实很直白:你的解析代码期望处理一个键值对形式的字典结构,但实际拿到的JSON数据却是有序列表形式的数组结构,两者类型不匹配,直接导致了解码失败。下面我结合常见的开发场景,帮你定位并修复问题:

第一步:先确认你的JSON真实结构

先搞清楚你拿到的JSON到底是数组还是字典:

  • 如果是数组,首尾会是[],示例如下:
    [
      {"username": "Zahid", "email": "zahid@example.com"},
      {"username": "Alice", "email": "alice@example.com"}
    ]
    
  • 如果是字典,首尾会是{},示例如下:
    {
      "status": "success",
      "message": "数据获取成功",
      "data": [{"username": "Zahid", "email": "zahid@example.com"}]
    }
    

第二步:检查并修正你的解析代码

我以Swift的JSONDecoder(iOS/macOS开发最常用的解析工具)为例,给你展示错误和正确的写法:

错误写法(期望字典却解析数组)

假设你定义了一个对应字典的模型,但实际JSON是数组:

struct User: Codable {
    var username: String
    var email: String
}

// 错误:用解析单个字典的方式解析数组
let decoder = JSONDecoder()
do {
    let user = try decoder.decode(User.self, from: jsonData)
} catch {
    print(error) // 就会抛出你遇到的错误
}

正确写法(解析数组)

如果JSON是数组,你需要把解析目标改成模型数组[User].self:

do {
    let userList = try decoder.decode([User].self, from: jsonData)
    // 这里userList是[User]类型,可以遍历处理每一个用户数据
    for user in userList {
        print(user.username)
    }
} catch {
    print(error)
}

另一种常见场景:JSON外层是字典,你误解析了内部数组

如果你的JSON是外层字典嵌套数组的结构(比如后端标准返回格式),那你需要先定义对应外层字典的模型:

// 对应外层字典的模型
struct UserResponse: Codable {
    var status: String
    var message: String
    var data: [User]
}

// 对应数组内单个元素的模型
struct User: Codable {
    var username: String
    var email: String
}

// 解析外层字典
do {
    let response = try decoder.decode(UserResponse.self, from: jsonData)
    let userList = response.data
} catch {
    print(error)
}

通用排查小技巧

  1. 打印原始JSON数据:把拿到的jsonData转成字符串打印,确认真实结构:
    if let jsonString = String(data: jsonData, encoding: .utf8) {
        print("原始JSON内容:\(jsonString)")
    }
    
  2. 严格匹配模型与JSON结构:确保你的Codable模型的层级、字段类型和JSON完全对应,数组对应数组类型,字典对应结构体/类。
  3. 检查API返回一致性:有时候后端会在请求失败时返回数组格式的错误信息,成功时返回字典,这种情况要额外做错误分支处理。

如果你的JSON或代码有具体内容,可以补充上来,我能帮你更精准地调整!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:06:11