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

Swift解析JSON报错「Expected to decode Dictionary<String, Any> but found an array instead」求助

问题原因

报错是由于你的JSON数据根节点为数组类型,但解析代码尝试将其解码为单个Result字典类型,二者类型不匹配导致的。
你现有的Phonetic和Result结构体定义已经符合JSON数组内单个元素的结构,无需调整,仅需要修改解析逻辑的对应类型即可。

修改后的完整代码
private func ParseJSON() {
    guard let path = Bundle.main.path(forResource: "dataDictionary", ofType: "json") else {
        return
    }
    let url = URL(fileURLWithPath: path)
    
    // 接收结果的变量类型改为Result数组
    var result: [Result]?
    
    do {
        let jsonData = try Data(contentsOf: url)
        // 解码目标类型改为[Result].self,匹配外层数组结构
        result = try JSONDecoder().decode([Result].self, from: jsonData)
        
        if let result = result {
            print(result)
            // 若只需要数组内第一个词条,可通过result.first获取单个Result对象
        } else {
            print("Failed to parse")
        }
        return
    }
    catch {
        print("Error:\(error)")
    }
}

struct Phonetic: Codable {
    let text: String?
    let audio: String?
}

struct Result: Codable {
    let phonetic : String?
    let phonetics : [Phonetic]?
    let word : String?
}
补充说明
  • 如果你业务上确定该JSON数组永远只会返回1个元素,可以在解析完成后通过result?.first取出单个Result实例使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 00:27:03