在 Swift 中解码 JSON API - 重复的结构名称

Posted

技术标签:

【中文标题】在 Swift 中解码 JSON API - 重复的结构名称【英文标题】:Decoding JSON APIs in Swift - Duplicate Struct Names 【发布时间】:2021-06-11 15:46:12 【问题描述】:

我的应用在 Swift 中解析了许多 API,其中一些 API 具有相似的字典和/或数组名称。

我无法控制传入的 JSON 字典数组的名称,因为它们来自 API 端点。目前我有一个处理所有这些 API 的实用程序类。如何解析共享通用名称的 API?

这是我用于一个 API 的内容。

 struct aVideo: Codable 
        let page, totalResults, totalPages: Int
        let results: [Result]
        
        enum CodingKeys: String, CodingKey 
            case page
            case results
        
    
    
    // MARK: - Result
    struct Result: Codable 
        let popularity: Double
        let voteCount: Int
        let video: Bool
    

此其他 API 使用相同的键 Result 并引发错误。

// MARK: - WordInfo
    struct WordInfo: Codable 
        let word: String
        let results: [Result]
        let frequency: Double
    

     // MARK: - Result
    struct Result: Codable 
        let definition, partOfSpeech: String
        let synonyms, entails, hasTypes, derivation: [String]
    

感谢您的任何建议。

【问题讨论】:

【参考方案1】:

JSON 本身并没有定义结构的名称——只定义了包含它的属性的名称,因此您可以根据需要重新定义结构的名称:

struct WordInfo: Codable 
        let word: String
        let results: [WordInfoResult]
        let frequency: Double
    

     // MARK: - Result
    struct WordInfoResult: Codable 
        let definition, partOfSpeech: String
        let synonyms, entails, hasTypes, derivation: [String]
    

解码器会知道,当它到达WordInfo 上的results 时,它应该被解析为[WordInfoResult] 类型,因为这就是你定义它的方式。

【讨论】:

以上是关于在 Swift 中解码 JSON API - 重复的结构名称的主要内容,如果未能解决你的问题,请参考以下文章

使用swift解码巨大的JSON数组URL

如何在 Swift 中解码一个命名的 json 对象数组

在 Swift 中使用 JSON 解码器难以解析 JSON 中的整数值

Swift - 解码数组 JSON 数据的数组

用于解析平台 REST API (JSON) 并解码为结构的 Swift URLRequest

Swift模型中数组和字典的JSON解码