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

Swift中JSONDecoder解码对象后打印输出异常求助

解决Swift JSON解码后打印结构体出现未知上下文前缀的问题

问题原因

你看到的MyApp.AppDelegate.(unknown context at $102a37f00).(unknown context at $102a38038).Usage这类前缀,是Swift默认打印结构体时的调试信息——因为你的Usage结构体定义在AppDelegate的方法内部(或作为AppDelegate的嵌套类型),Swift默认的实例描述会包含类型的完整命名空间路径,这些"unknown context"是编译器生成的内部上下文标识,并非解码错误,实际上你的JSON解码已经成功完成了。

解决方案

根据你的需求,有两种常用处理方式:

1. 直接访问目标属性

如果你只需要打印partOfSpeech的值,直接遍历usage数组或访问指定元素的属性即可:

// 打印第一个usage元素的partOfSpeech
print(jsonData[0].usage[0].partOfSpeech) // 输出 "determiner"

// 如果有多个usage元素,可遍历打印
for usageItem in jsonData[0].usage {
    print(usageItem.partOfSpeech)
}

2. 自定义结构体的打印描述

给Usage结构体实现CustomStringConvertible协议,自定义打印内容,这样后续直接打印Usage实例或其数组时,会使用你定义的格式:

struct Usage: Codable, CustomStringConvertible {
    var partOfSpeech: String
    
    // 自定义打印内容
    var description: String {
        return partOfSpeech // 仅输出词性值
        // 也可以自定义带属性名的格式:
        // return "partOfSpeech: \(partOfSpeech)"
    }
}

修改后再执行print(jsonData[0].usage),会输出[determiner](如果用带属性名的格式则输出[partOfSpeech: determiner])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:15:33