可以获取Alamofire Xcode Json Parse上的Yahoo API

发布于 2025-01-26 12:17:29 字数 2414 浏览 1 评论 0原文

我无法让Alamofire在Xcode上工作。我正在尝试json parse yahoo api,但它行不通。开始,我想在“ struct stock:codable”的“符号”中解析并打印一个元素,

import UIKit
import SwiftUI
import UserNotifications
import Alamofire

struct QuoteParent: Codable {
    var quoteResponse: QuoteResponse
    init() {
        quoteResponse = QuoteResponse()
    }
}

struct QuoteResponse: Codable {
    var error: QuoteError?
    var result: [Stock]?
    init() {
        error = nil
        result = []
    }
}

struct QuoteError: Codable {
    var lang: String?
    var description: String?
    var message: String?
    var code: Int?
    init() {
        lang = ""
        description = ""
        message = ""
        code = 0
    }
}

struct Stock: Codable {
    var language : String?
    var region : String?
    var quoteType : String?
    var typeDisp : String?
    var quoteSourceName : String?
    var triggerable : String?
    var customPriceAlertConfidence : String?
    var exchange : String?
    var exchangeTimezoneName : String?
    var exchangeTimezoneShortName : String?
    var gmtOffSetMilliseconds : String?
    var market : String?
    var esgPopulated : String?
    var marketState : String?
    var firstTradeDateMilliseconds : String?
    var priceHint : String?
    var preMarketTime : String?
    var preMarketPrice : String?
    var regularMarketTime : String?
    var regularMarketPrice : String?
    var fullExchangeName : String?
    var sourceInterval : String?
    var exchangeDataDelayedBy : String?
    var tradeable : String?
    var symbol : String?
}

是我的代码。 在jsondecoder系列中,这让我陷入错误,

谢谢


     let url = "https://query1.finance.yahoo.com/v7/finance/quote?lang=en-US&region=US&corsDomain=finance.yahoo.com&symbols=FB"
       
var quoteParent = QuoteParent()
        let req = AF.request(url, parameters: ["quoteResponse": "result"])
        req.responseData { (response) in
                guard let data = response.value else {return}
                do {
                    quoteParent = try JSONDecoder().decode(QuoteParent.self, from: data)
                    let stock = quoteParent.quoteResponse.result?[0]
                    let symbol = stock?.symbol?.uppercased() ?? ""
                    print(symbol)
                    
                    
                } catch {
                    print(error)
                }
        }
      

I can't get alamofire to work on Xcode. I'm trying to json parse yahoo API and it won't work . for start i jut wanted to parse and print one element in of "struct Stock: Codable " which is "symbol"

any help would be appreciated

import UIKit
import SwiftUI
import UserNotifications
import Alamofire

struct QuoteParent: Codable {
    var quoteResponse: QuoteResponse
    init() {
        quoteResponse = QuoteResponse()
    }
}

struct QuoteResponse: Codable {
    var error: QuoteError?
    var result: [Stock]?
    init() {
        error = nil
        result = []
    }
}

struct QuoteError: Codable {
    var lang: String?
    var description: String?
    var message: String?
    var code: Int?
    init() {
        lang = ""
        description = ""
        message = ""
        code = 0
    }
}

struct Stock: Codable {
    var language : String?
    var region : String?
    var quoteType : String?
    var typeDisp : String?
    var quoteSourceName : String?
    var triggerable : String?
    var customPriceAlertConfidence : String?
    var exchange : String?
    var exchangeTimezoneName : String?
    var exchangeTimezoneShortName : String?
    var gmtOffSetMilliseconds : String?
    var market : String?
    var esgPopulated : String?
    var marketState : String?
    var firstTradeDateMilliseconds : String?
    var priceHint : String?
    var preMarketTime : String?
    var preMarketPrice : String?
    var regularMarketTime : String?
    var regularMarketPrice : String?
    var fullExchangeName : String?
    var sourceInterval : String?
    var exchangeDataDelayedBy : String?
    var tradeable : String?
    var symbol : String?
}

here is my code
at the JSONDecoder line it throw me to catch error

thank you


     let url = "https://query1.finance.yahoo.com/v7/finance/quote?lang=en-US®ion=US&corsDomain=finance.yahoo.com&symbols=FB"
       
var quoteParent = QuoteParent()
        let req = AF.request(url, parameters: ["quoteResponse": "result"])
        req.responseData { (response) in
                guard let data = response.value else {return}
                do {
                    quoteParent = try JSONDecoder().decode(QuoteParent.self, from: data)
                    let stock = quoteParent.quoteResponse.result?[0]
                    let symbol = stock?.symbol?.uppercased() ?? ""
                    print(symbol)
                    
                    
                } catch {
                    print(error)
                }
        }
      

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一紙繁鸢 2025-02-02 12:17:29

尝试使用可响应的启用,而是

  req.responseDecodable(of: QuoteParent.self) { response in
            let stock = response.value?.quoteResponse.result?[0]
            let symbol = stock?.symbol?.uppercased() ?? ""
            print(symbol)
  }

用正确的数据类型声明结构属性

struct Stock: Codable {
    var language : String?
    var region : String?
    var quoteType : String?
    var typeDisp : String?
    var quoteSourceName : String?
    var customPriceAlertConfidence : String?
    var exchange : String?
    var exchangeTimezoneName : String?
    var exchangeTimezoneShortName : String?
    var symbol : String?
    var market : String?
    var fullExchangeName : String?
    var marketState : String?
    var gmtOffSetMilliseconds : Double?
    var firstTradeDateMilliseconds : Double?
    var priceHint : Double?
    var preMarketTime : Double?
    var preMarketPrice : Double?
    var regularMarketTime : Double?
    var regularMarketPrice : Double?
    var sourceInterval : Double?
    var exchangeDataDelayedBy : Double?
    var tradeable : Bool?
    var esgPopulated : Bool?
    var triggerable : Bool?
}

,结果为“ fb”

Try to use responseDecodable instead,

  req.responseDecodable(of: QuoteParent.self) { response in
            let stock = response.value?.quoteResponse.result?[0]
            let symbol = stock?.symbol?.uppercased() ?? ""
            print(symbol)
  }

Declare the struct properties with the correct data type

struct Stock: Codable {
    var language : String?
    var region : String?
    var quoteType : String?
    var typeDisp : String?
    var quoteSourceName : String?
    var customPriceAlertConfidence : String?
    var exchange : String?
    var exchangeTimezoneName : String?
    var exchangeTimezoneShortName : String?
    var symbol : String?
    var market : String?
    var fullExchangeName : String?
    var marketState : String?
    var gmtOffSetMilliseconds : Double?
    var firstTradeDateMilliseconds : Double?
    var priceHint : Double?
    var preMarketTime : Double?
    var preMarketPrice : Double?
    var regularMarketTime : Double?
    var regularMarketPrice : Double?
    var sourceInterval : Double?
    var exchangeDataDelayedBy : Double?
    var tradeable : Bool?
    var esgPopulated : Bool?
    var triggerable : Bool?
}

And the result is "FB"

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文