簡體   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