Json dosyasındaki numara ile struct kullanarak API çağrısı nasıl yapılır

0

Soru

Daha fazla ayrıntı sağlama:

Yapısında, seviyelerden birinin başında (25th_percentile) bir sayı olan bir apı'den (aşağıda bağlantılı) bir seviyeye erişmeye çalışıyorum. Modelimde bir sabit oluşturamıyorum çünkü let değerini bir sayı ile başlatamıyorum (yani, 25th_percentile içinde 25). 25. yüzdelik seviyedeki verilere nasıl erişebilirsiniz?

Kodum aşağıdaki gibidir. Enum'u önerildiği gibi kullandığımda," kod çözülebilir protokole uymuyor " hatası alıyorum.

     //
 //  SchoolData.swift
 //
 //

 import Foundation

 struct Results: Decodable {
     let results: [SelectedSchool]
 }



 struct SelectedSchool: Decodable, Identifiable {
     let id: Int
     let fed_sch_cd: String
     let latest: LatestData

 }
 struct LatestData: Decodable {
     let school: SchoolDetails
     let admissions: AdmissionsDetails
 }

 struct SchoolDetails: Decodable {
     let name: String
     let school_url: String
 }

 struct AdmissionsDetails: Decodable {
     let admission_rate: AdmissionRateDetails
     let sat_scores: SATScores
 }


 struct SATScores: Decodable {
     let midpoint: SATSubjects
     let the25th_percentile: SATSubjects2

     enum CodingKeys: String, CodingKey {
         case the25th_percentile = "25th_percentile"
     }
 }




 struct SATSubjects: Decodable {
     let math: Int?
     let writing: Int?
     let critical_reading: Int?
 }


 struct SATSubjects2: Decodable {
     let math: Int?
     let writing: Int?
     let critical_reading: Int?
 }


 struct AdmissionRateDetails: Decodable {
     let overall: Float?
 }

 struct URLName {
     let partialURL = "https://api.data.gov/ed/collegescorecard/v1/schools?school.name="
     var searchTerm: String = ""
     let apiKey = "&api_key=myapikey"
 }

API Json'a dönüştürüldü.

api json swiftui
2021-11-23 03:43:03
1

En iyi cevabı

0

bunu dene:

struct SATTwentyFive: Decodable {
    let the25th_percentile: SubjectData
    
    enum CodingKeys: String, CodingKey {
        case the25th_percentile = "25th_percentile"
    }
}

DÜZENLEME1:

Json verilerinizi okumak için bu tür yapıları deneyin (benim için iyi çalışıyor):

struct Results: Decodable {
    let results: [SelectedSchool]
}

struct SelectedSchool: Decodable, Identifiable {
    let id: Int
    let fed_sch_cd: String
    let latest: LatestData
}

struct LatestData: Decodable {
    let school: SchoolDetails
    let admissions: AdmissionsDetails
}

struct SchoolDetails: Decodable {
    let name: String
    let school_url: String
}

struct AdmissionsDetails: Decodable {
    let admission_rate: AdmissionRateDetails
    let sat_scores: SATScores
}

// ---- here ----
struct SATScores: Decodable {
    let midpoint: SATSubjects
    let the25th_percentile: SATSubjects

    enum CodingKeys: String, CodingKey {
        case the25th_percentile = "25th_percentile"
        case midpoint = "midpoint"
    }
}

struct SATSubjects: Decodable {
    let math: Int?
    let writing: Int?
    let critical_reading: Int?
}

struct AdmissionRateDetails: Decodable {
    let overall: Float?
}

ve kodu çöz Results hoşlanmak:

try JSONDecoder().decode(Results.self, from: data)
2021-11-25 03:09:56

teşekkürler workingdog-önerileni yaptığımda, çözülebilir protokol hatasına uymayan bir hata alıyorum.
boxscorepress.com

Cevabımdaki yaklaşım enum CodingKeys işler. Cevabımı güncelledim. Not: gizli anahtarınızı göndermeyin, hemen kaldırın.
workingdog

workingdog-API anahtarı kaldırıldı ve TEŞEKKÜR EDERİM!!!! 1000 Şey denedim, ama görünüşe göre yukarıdakileri değil. zaman ayırdığınız için çok teşekkür ederim!!!
boxscorepress.com

iyi çalışıyor. Cevabım işe yararsa, lütfen doğru olarak işaretleyebilirim.
workingdog

İşaretledim ama işaretimi kabul etmesi için yeterli "itibar puanım" yok. Bir şekilde not aldığını söyledi. Tekrar teşekkür ederim.
boxscorepress.com

bir soru gönderirken cevabı kabul edemeyeceğini bilmiyordum. Yine de teşekkürler.
workingdog

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................