Jak, aby se volání API pomocí struct s číslem v json souboru

0

Otázka

Poskytuje více detailů:

Snažím se získat přístup k úrovni z API (odkazované níže), který má v jeho struktuře, množství na začátku jedné z úrovní (25th_percentile). Jsem schopen vytvořit konstantní v mém modelu, protože nemůžu začít nechat hodnotu s číslem (tj, 25 v 25th_percentile). Jak můžete přistupovat k datům na 25. percentilu úrovni?

Můj kód je následující. Když jsem se použít enum, jak je navrženo, dostal jsem "ne podle dekódovatelný protokol" chyba.

     //
 //  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 převést na JSON.

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

Nejlepší odpověď

0

zkuste toto:

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

EDIT1:

Zkuste tyhle structs číst vaše data json (funguje dobře pro mě):

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

a dekódovat Results jako:

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

díky workingdog - když jsem se dělat, co navrhl, dostanu které neodpovídají dekódovatelný chyba protokolu.
boxscorepress.com

Přístup, který ve své odpovědi s enum CodingKeys funguje. Jsem aktualizovány moje odpověď. P. S: nepište svůj tajný klíč, odstraňte ji nyní.
workingdog

workingdog - odstranit API klíč a DĚKUJI!!!!!! Zkusil jsem 1000 věcí, ale zřejmě ne výše. opravdu oceňuji váš čas!!!
boxscorepress.com

jsem rád, že to funguje. Pokud moje odpověď bylo použití, by se mohl označit jako správnou prosím.
workingdog

Označila jsem to ale nemám dost "bodů reputace" na to, aby přijmout svou značku. To řekl, že poznamenal, že to nějak. Ještě jednou děkuji.
boxscorepress.com

oh, nevěděl jsem, že nelze přijmout odpověď, když budete psát otázku. Každopádně díky.
workingdog

V jiných jazycích

Tato stránka je v jiných jazycích

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