Проблема с разбором вложенного JSON в Swift 5 с использованием Decodable

#json #swift

#json #swift

Вопрос:

У меня есть API, который возвращает JSON, структурированный аналогично приведенному ниже. В целях простоты я удалил все родственные словари в JSON, чтобы мы могли сосредоточиться на основной цели анализа одного свойства. Кажется, я не могу понять, почему он не будет анализироваться.

API JSON:

 {
    "players": {
        "uniqueUUIDwouldGoHere": {
            "ace": {
                "operatorpvp_kills": 11
            }
        }
    }
}
  

Мои структуры Swift написаны следующим образом:

 public struct opsResponse: Decodable {
    var players : [String: opsInner]
    
    enum CodingKeys: String, CodingKey {
        case players = "players"
    }
}
public struct opsInner: Decodable {
    var ace : [String: ace]
    
    enum CodingKeys: String, CodingKey {
        case ace = "ace"
    }
}

public struct ace: Decodable {
    var operatorpvp_kills : Int = 0
    
    enum CodingKeys: String, CodingKey {
        case operatorpvp_kills = "operatorpvp_kills"
    }
}
  

И, наконец, часть декодера URLSession:

 let decoder = JSONDecoder()
let json = try decoder.decode(opsResponse.self, from: data)
  

Сообщение об ошибке от catch :

 typeMismatch(Swift.Dictionary<Swift.String, Any>, Swift.DecodingError.Context(codingPath: [CodingKeys(stringValue: "players", intValue: nil), _JSONKey(stringValue: "uniqueUUIDwouldGoHere", intValue: nil), CodingKeys(stringValue: "ace", intValue: nil), _JSONKey(stringValue: "operatorpvp_kills", intValue: nil)], debugDescription: "Expected to decode Dictionary<String, Any> but found a number instead.", underlyingError: nil))
  

Ответ №1:

Обновить:

Я изменил: var ace : [String: ace] на var ace : ace