繁体   English   中英

Swift - 如何获得嵌套 JSON 数组中的特定值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM