[英]Swift - How to get to Specific Value in nested JSON array
我正在尝试在我突出显示的嵌套 JSON 中获取“图像”值字符串(事件/表演者/图像)
{
"events":[
{
"type":"minor_league_baseball",
"id":4997345,
"datetime_utc":"2021-04-20T07:30:00",
"venue":{
"state":"FL",
"name_v2":"Joker Marchant Stadium",
"postal_code":"33805",
"name":"Joker Marchant Stadium",
"links":[
],
"timezone":"America\/New_York",
"url":"https:\/\/seatgeek.com\/venues\/joker-marchant-stadium\/tickets",
"score":0.689039,
"location":{
"lat":28.0739,
"lon":-81.9533
},
"address":"2301 Lakeland Hills Blvd.",
"country":"US",
"has_upcoming_events":true,
"num_upcoming_events":43,
"city":"Lakeland",
"slug":"joker-marchant-stadium",
"extended_address":"Lakeland, FL 33805",
"id":3929,
"popularity":0,
"access_method":null,
"metro_code":539,
"capacity":8500,
"display_location":"Lakeland, FL"
},
"datetime_tbd":true,
"performers":[
{
"type":"minor_league_baseball",
"name":"Lakeland Flying Tigers",
"image":"https:\/\/seatgeek.com\/images\/performers-landscape\/lakeland-flying-tigers-a24bed\/9431\/huge.jpg",
"id":9431,
"images":{
"huge":"https:\/\/seatgeek.com\/images\/performers-landscape\/lakeland-flying-tigers-a24bed\/9431\/huge.jpg"
},
我在这里有我的结构,但是一旦我尝试从“performers”到“ImageLink/image”的 go 我在我的主 ViewController 中得到一个(类型'[ImageLink]'的值没有成员'image')错误
import Foundation
struct Entry: Codable {
let events: [EventsData]
}
struct EventsData: Codable {
let type: String
let id: Int
let title: String
let venue: locationInfo
let performers: [ImageLink]
}
struct ImageLink: Codable {
let image: String
}
struct locationInfo: Codable {
let display_location: String!
// let state: String
// let name_v2: String
}
当我尝试获取特定的图像字符串值时,我收到错误('[ImageLink]' 类型的值没有成员'image')。
import UIKit
class 视图控制器:UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let url = URL(string:"https://api.seatgeek.com/2/events?client_id=MjE3NTI2Nzd8MTYxODg1NzkwOS44ODcxODE4") {
URLSession.shared.dataTask(with: url) { data, response, error in
if let data = data {
let jsonDecoder = JSONDecoder()
do {
let parsedJSON = try jsonDecoder.decode(Entry.self, from: data)
for entryData in parsedJSON.events {
print(entryData.performers.image)
print(entryData.id)
print(entryData.title)
print(entryData.venue.display_location+"\n")
}
} catch {
print(error)
}
}
}.resume()
}
}
}
我是 JSON 的新手,对于新手问题,我深表歉意:) 提前感谢任何可以帮助我理解如何做到这一点的人。
编辑工作:
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let url = URL(string:"https://api.seatgeek.com/2/events?client_id=MjE3NTI2Nzd8MTYxODg1NzkwOS44ODcxODE4") {
URLSession.shared.dataTask(with: url) { data, response, error in
if let data = data {
let jsonDecoder = JSONDecoder()
do {
let parsedJSON = try jsonDecoder.decode(Entry.self, from: data)
for entryData in parsedJSON.events {
print(entryData.id)
print(entryData.title)
print(entryData.venue.display_location+"\n")
print(entryData.performers.first!.image)
}
} catch {
print(error)
}
}
}.resume()
}
}
}
performers
也是一个数组(注意[]
),你必须使用两个循环
for entryData in parsedJSON.events {
for performer in entryData.performers {
print(performer.image)
}
}
或者如果只有一项
for entryData in parsedJSON.events {
print(entryData.performers.first?.image)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.