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

