Cómo hacer la llamada a la API utilizando struct con el número en el archivo json

0

Pregunta

Proporcionar más detalle:

Estoy tratando de acceder a un nivel de una API (enlace a continuación) que tiene en su estructura, un número al principio, uno de los niveles (25th_percentile). Soy incapaz de crear una constante en mi modelo, ya que no puedo iniciar la deje valor con un número (es decir, 25 en 25th_percentile). ¿Cómo se puede acceder a los datos en el percentil 25 nivel?

Mi código es el siguiente. Cuando yo uso enum como se ha sugerido, me sale un "no conforme a descifrable protocolo de error".

     //
 //  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"
 }

La API de convertir a JSON.

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

Mejor respuesta

0

intente esto:

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

EDIT1:

Trate de este tipo de estructuras para leer sus datos en json (funciona bien para 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?
}

y decodificar Results como:

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

gracias workingdog - cuando hago la sugerencia de que puedo conseguir una que no se ajusten a descifrable error de protocolo.
boxscorepress.com

El enfoque en mi respuesta con la enum CodingKeys obras. He actualizado mi respuesta. P. S: no publiques tu clave secreta, quitar ahora.
workingdog

workingdog - se ha eliminado la clave de la API y GRACIAS!!!! He intentado 1000 cosas, pero al parecer no es el de arriba. realmente aprecio su tiempo!!!
boxscorepress.com

me alegro de que se está trabajando. Si mi respuesta fue de uso, podría marcar como correcta por favor.
workingdog

Hice lo marca pero no tengo suficiente "puntos de reputación" para que acepte mi marca. Dijo que notar de alguna manera. Gracias de nuevo.
boxscorepress.com

oh, no sabía que usted no puede aceptar una respuesta a la hora de publicar una pregunta. Gracias de todos modos.
workingdog

En otros idiomas

Esta página está en otros idiomas

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