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

Swift中Bing API JSON解码问题:webPages类型定义错误排查

解决Bing API JSON解码中webPages类型不匹配的问题

从你给出的错误信息和JSON结构来看,问题出在webPages的类型定义上——你用了嵌套字典,但实际返回的JSON里webPages是一个包含数组字段的对象,解码时自然会触发类型不匹配。

错误原因拆解

错误提示里明确指出了问题核心:

Expected to decode Dictionary<String, String> but found an array instead.

这个错误指向webPages.value字段:你原本把它当成了字典结构,但实际它是一个网页对象的数组,而且webPages本身也是一个包含多个属性的复杂对象,不是简单的字典嵌套。

正确的Codable结构定义

我们需要为webPages及其内部的value数组分别定义对应的结构体,完全匹配JSON的层级结构:

// 对应webPages.value里的单个网页对象
struct WebPageItem: Codable {
    let id: String
    let name: String
    let url: String
    let isFamilyFriendly: Bool
    let displayUrl: String
    let snippet: String
    let dateLastCrawled: String
    let language: String
    let isNavigational: Bool
}

// 对应外层的webPages对象
struct WebPages: Codable {
    let totalEstimatedMatches: Int
    let value: [WebPageItem]
    let someResultsRemoved: Bool
}

// 顶层的解码结构体(遵循Swift命名规范,结构体首字母大写)
struct CodableData: Codable {
    let _type: String
    let queryContext: [String: String]
    let webPages: WebPages
}

为什么这样定义?

  1. WebPageItem:精准匹配JSON中webPages.value数组里的每个对象属性,所有字段类型和JSON完全对应(比如isFamilyFriendly是布尔值,totalEstimatedMatches是整数)。
  2. WebPages:对应JSON里的webPages对象,包含三个属性:totalEstimatedMatches(整数)、value(WebPageItem数组)、someResultsRemoved(布尔值)。
  3. CodableData:将原本错误的[String : [String : String]]替换为WebPages类型,完全贴合JSON的实际结构。

这样修改后,你再进行JSON解码就不会触发类型不匹配的错误了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 17:30:42