加载没有名称的数组 (JSON) (Swift 5)

Posted

技术标签:

【中文标题】加载没有名称的数组 (JSON) (Swift 5)【英文标题】:Load an array with no name (JSON) (Swift 5) 【发布时间】:2020-04-12 21:53:15 【问题描述】:

我正在尝试通过 swift 中的 HTTP get 方法提取 JSON,如下所示:

[“姓名”:“约翰”,年龄:“十五”,“姓名”:“苏”,“年龄”:“十六”]

我的目标是创建一个可以提取数据并将其放入单个单元格的函数。我唯一的问题是如何格式化结构,因为数组没有名称。

这是我的结构的样子:

struct SearchResponse: Codable 
    let name: String?
    let age: String?

这就是我(尝试)收集数据的方式:

  guard let data = data else  return 
                                  do 
                                      
  let obj: SearchResponse = try JSONDecoder().decode(SearchResponse.self, from: data)
                                    
  let searchObj = SearchObject(age: obj.age ?? "", name: obj.name ?? "")

                                          
                                
                                  
self.search_object = searchObj ?? []

行数是节是:

return search_object.count

当我运行代码时,单元格只是返回为空白。

【问题讨论】:

【参考方案1】:

您的 JSON 是 SearchResponses 的数组,因此您必须将其解码为 SearchResponses 的数组:

guard let data = data else  return 

do 
    let objects = try JSONDecoder().decode([SearchResponse].self, from: data)
    let searchObjects = objects.map 
        SearchObject(age: $0.age ?? "", name: $0.name ?? "")
    

    self.search_object = searchObjects

 catch 
    print(error)

或者只是让SearchObject 本身符合Codable 并完全消除对SearchResponse 的需要:

struct SearchObject: Codable 
    let age: String?
    let name: String?


[...]

guard let data = data else  return 

do 
    self.search_object = try JSONDecoder().decode([SearchObject].self, from: data)
 catch 
    print(error)

【讨论】:

以上是关于加载没有名称的数组 (JSON) (Swift 5)的主要内容,如果未能解决你的问题,请参考以下文章

TableView 没有加载任何 JSON 数据 Swift 4

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

在 Swift 中将 JSON 加载到 UItableView

从 Json 数据中分组,其中包含 Swift 4 中的字典数组

修改行数组时,Swift 2数据不会重新加载数据

Swift 在 UITableView 中异步加载图像 - 顶部单元格没有图片