Ako vytvoriť API volanie pomocou struct s číslom v json súbor

0

Otázka

Poskytuje viac podrobností:

Snažím sa pristupovať k úrovni z API (spojené nižšie), ktorá má v jeho štruktúra, počet na začiatku jednej z úrovní (25th_percentile). Som schopný vytvoriť stálu v mojom modeli, pretože som sa nemôže začať nech hodnoty s číslo (ie, 25 v 25th_percentile). Ako môžete získať prístup k údajom v 25. percenta úrovni?

Môj kód je nasledovný. Keď som pomocou enum, ako navrhovali, dostanem ", ktoré nezodpovedajú je možné ich dekódovať 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 prevedené na JSON.

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

Najlepšiu odpoveď

0

skúste toto:

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

EDIT1:

Vyskúšajte tieto druh structs na čítanie dát json (funguje aj pre mňa):

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ódovať Results ako:

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

vďaka workingdog - keď som sa to urobiť, ako navrhovali, dostanem, ktoré nezodpovedajú je možné ich dekódovať chyba protokolu.
boxscorepress.com

Prístup v odpovedi s enum CodingKeys funguje. Mám aktualizované moja odpoveď. P. S: nie je post vaše tajné tlačidlo, vyberte ju.
workingdog

workingdog - odstránené API kľúč a ĎAKUJEME, že STE!!!! Snažil som sa 1000 vecí, ale zrejme nie vyššie. naozaj oceňujem váš čas!!!
boxscorepress.com

som rád, že to funguje. Ak moja odpoveď bola používania, by mohli označiť ako správne, prosím.
workingdog

Som si označiť to, ale nemám dosť "povesť bodov" na to, aby sa prijať moje známky. To, že to povedal poznamenať, nejako. Ešte raz vám ďakujem.
boxscorepress.com

aha, nevedel som, že nemôžete prijať odpoveď, keď si zašlite otázku. Vďaka rovnako.
workingdog

V iných jazykoch

Táto stránka je v iných jazykoch

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