Cum de a face apel API folosind struct cu număr în fișier json

0

Problema

Oferind mai multe detalii:

Eu sunt încercarea de a accesa un nivel de un API (legate de mai jos), care are în structură un număr de la început unul dintre niveluri (25th_percentile). Eu sunt în imposibilitatea de a crea o constantă în modelul meu pentru că eu nu pot începe să valoare cu un număr (de exemplu, 25 în 25th_percentile). Cum puteți accesa datele de la cea de-a 25-a percentilă nivel?

Codul meu este după cum urmează. Când m-am folosi enum cum a sugerat, am primit un "nu sunt conforme cu decoda protocol" eroare.

     //
 //  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 convertit la JSON.

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

Cel mai bun răspuns

0

încercați acest lucru:

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

EDIT1:

Încercați aceste fel de structs pentru a citi date json (funcționează bine pentru mine):

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 decoda Results cum ar fi:

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

multumesc workingdog când m - am face cum a sugerat, am primit un neconforme pentru a decoda eroare de protocol.
boxscorepress.com

Abordarea în răspunsul meu cu enum CodingKeys funcționează. Am actualizat răspunsul meu. P. S: nu posta cheie secretă, scoateți-l acum.
workingdog

workingdog - scos cheia API și VĂ MULȚUMESC!!!! Am incercat 1000 de lucruri, dar se pare că nu mai sus. chiar apreciez timp!!!
boxscorepress.com

mă bucur că este în lucru. Dacă răspunsul meu a fost de folos, ar putea marca la fel de corect te rog.
workingdog

Am făcut semn, dar nu am destule "puncte de reputație" pentru ca acesta să accepte semnalul meu. Aceasta a declarat că a remarcat-o într-un fel. Vă mulțumesc din nou.
boxscorepress.com

oh, nu știam că nu poate accepta un răspuns atunci când a posta o intrebare. Multumesc oricum.
workingdog

În alte limbi

Această pagină este în alte limbi

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