JSON 访问数组内的多个实例

Posted

技术标签:

【中文标题】JSON 访问数组内的多个实例【英文标题】:JSON accessing multiple instances inside of an array 【发布时间】:2018-10-13 04:17:01 【问题描述】:

我正在使用 JSONDecoder 通过 API 访问 JSON 数据。在这个 JSON 数据中有几个 [arrays]。我遇到了访问每个出现密钥的实例的问题。

代码如下:

var details = [Details]()
var production = [Production]()

struct Details: Codable 
    let title: String
    let poster_path: String?
    let id: Int?
    let production_companies: [Production]


struct Production: Codable 
    let name: String



let task = session.dataTask(with: request, completionHandler:  (dataOrNil, response, error) in
        if let data = dataOrNil 
            do  let details = try! JSONDecoder().decode(Details.self, from: data)

let production = details.production_companies
print(production)

 
        

    )

这是print(production) 打印到控制台的内容:

[Film_Bee.DetailsView.Production(名称:“哥伦比亚影业”)、Film_Bee.DetailsView.Production(名称:“漫威娱乐”)、Film_Bee.DetailsView.Production(名称:“索尼影业”)]

我想要做的是访问数组中的每个name。我知道要访问第一个,我可以使用production.first?.name,但如果我不确定如何访问每一个以放入单个标签中。

【问题讨论】:

您要将三个公司的名称添加到单个 UIlabel 中还是三个 UIlabel 中? 我想将它们放入一个标签中。 我对您的previous question 的回答显示了如何获取数组中的所有项目。 【参考方案1】:

Prashant 点了。我只是另外补充一点,可能对你有帮助。

我相信你知道像 for 或 forEach 这样的快速循环来查看你的字符串列表

production.forEach  model in
    print(model.name)

对于您的问题,您需要加入您的字符串列表。由于您需要更新 UI,请使用 DispatchQueue。

let productionList = production.map$0.name
let strings = productionList.joined(separator: " ") //use "\n" if you wish new line
print("stringList: \(strings)")
DispatchQueue.main.async()   
 yourLabel.text = strings

【讨论】:

【参考方案2】:

试试这个

let production = details.production_companies.map$0.name

production_companies 是数组。您必须使用 map 对其进行迭代并获得其简单易懂的名称对吗?

不相关但不要使用try!你应该正确处理错误使用do try catch block

【讨论】:

以上是关于JSON 访问数组内的多个实例的主要内容,如果未能解决你的问题,请参考以下文章

匹配python中字符串中标签的多个实例内的所有内容

synchronized同步方法

如何在对象 C 中解析具有多个实例的 JSON [重复]

具有多个实例的数据库访问

实例方法内的私有变量为什么不会出现线程安全问题

加载和访问多个 ctype 实例