所以我在使用 Youtube Analytics API 时遇到了一些问题,它返回如下所示的 JSON:
{
"kind": "youtubeAnalytics#resultTable",
"columnHeaders": [
{
"name": "views",
"columnType": "METRIC",
"dataType": "INTEGER"
}
],
"rows": [
[
6
]
]
}
我需要访问值 6 吗?
我创建的用于访问此值的结构似乎不起作用,我认为这与访问未加密的数组有关。
struct Response: Decodable {
let rows: [Row]?
}
struct Row: Decodable {
let value: String?
init(from decoder: Decoder) throws {
var container = try decoder.unkeyedContainer()
value = try container.decodeIfPresent(String.self)
}
}
然后访问值:
let jsonReturn = try JSONDecoder().decode(Response.self, from: data)
let row = jsonResult.rows![0]
let value = row.value
但是我也不确定访问该值是否正确。
最佳答案
"rows": [
[
6
]
]
这里的数组中有一个数组,所以写
let rows: [[Int]]
代替
let rows: [Row]
,因为类需要字典,因为类具有用于引用值的名称。它本来是正确的:
"rows": [
{
"value": "6"
{
]
"6"
因为您试图将它解码为 String?
,而不是 api 通过 给您的
。Int
6
您可以照常访问行中的数据:
response.rows[0][0]
更多访问数组的方法你可以通过
https://docs.swift.org/swift-book/LanguageGuide/CollectionTypes.html
提示:您可以使用 app.quicktype.io 立即获取给定 json 的结构。
关于json - 使用带有 Youtube Analytics 的 Swift 4 解码 JSON 以获得嵌套的非键控数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52322601/