json - 使用带有 Youtube Analytics 的 Swift 4 解码 JSON 以获得嵌套的非键控数组

标签 json swift youtube-api decode youtube-data-api

所以我在使用 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/

相关文章:

javascript - 来自带有父 ID 的平面的分层 json

ios - Firebase 身份验证 : Phone number authentication in Swift

ios - 我如何使用 Split( ) 而不是 componentsSeparatedByString( ) ?

youtube-api - YouTube IFrame API onError 值为 0 是什么意思?

google-apps-script - YouTube API v3 - 确定用户是否观看了视频?

javascript - jQuery AJAX 中的另一个函数完成后重新运行原始函数

javascript - React - onClick 用于动态生成的组件

Javascript 从维基百科 API 中提取数据

swift - 使用 NSCoding 将自定义 Swift 类保存到 UserDefaults

python - 在Python中使用gdata Youtube API时出现套接字错误