Jak zrobić wywołanie API, za pomocą struktury z numerem w pliku json

0

Pytanie

Zapewnienie bardziej szczegółowych informacji:

Staram się, aby uzyskać dostęp do poziomu z API (link poniżej), w strukturze którego jest liczba na początku jednego z poziomów (25 центиль). Nie mogę utworzyć stałą w jego modelu, bo nie mogę zacząć wartość let z liczby (Czyli 25 w 25th_percentile). Jak można uzyskać dostęp do danych na poziomie 25 percentyla?

Mój kod wygląda następująco. Gdy używam wyliczenie, jak zaproponowano, pojawia się błąd "nie odpowiada декодируемому protokołu".

     //
 //  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 jest przekształcany w formacie JSON.

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

Najlepsza odpowiedź

0

spróbuj to:

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

ПРАВКА1:

Spróbuj użyć takie struktury do odczytu danych json (dla mnie to działa dobrze).:

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?
}

i odszyfrować Results Lubię:

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

dzięki workingdog - kiedy robię, jak się monit, pojawia się błąd, nie odpowiedni декодируемому protokołu.
boxscorepress.com

Podejście w mojej odpowiedzi z enum CodingKeys działa. Zaktualizowałem swoją odpowiedź. P. S: nie publikuj swój tajny klucz, usuń go teraz.
workingdog

workingdog - usunąłem klucz API i DZIĘKUJĘ!!!! Próbowałem 1000 rzeczy, ale, najwyraźniej, nie powyższe. bardzo, bardzo doceniam twój czas!!!
boxscorepress.com

cieszę się, że to działa. Jeśli moja odpowiedź była pomocna, proszę zaznaczyć go jako poprawny.
workingdog

Ja oznaczył go, ale mam za mało "punktów reputacji", aby przyjął moją etykietę. Powiedział, że w jakiś sposób to zauważyłem. Jeszcze raz dziękuję ci.
boxscorepress.com

o, nie wiedziałem, że nie możesz zaakceptować odpowiedź, kiedy zadać pytanie. W każdym razie, dziękuję.
workingdog

W innych językach

Ta strona jest w innych językach

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