Como fazer chamada de API usando struct com número no arquivo json

0

Pergunta

Fornecendo mais detalhes:

Eu estou a tentar aceder a um nível de uma API (link abaixo) que tem em sua estrutura, um número no começo de um dos níveis (25th_percentile). Eu sou incapaz de criar uma constante em minha modelo, porque eu não posso começar a deixar de valor com um número (ou seja, 25 em 25th_percentile). Como você pode acessar os dados no percentil 25, nível?

O meu código é o seguinte. Quando eu uso o enum como sugerido, eu recebo um "não se conformando com decodificável protocolo de erro".

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

A API convertido para JSON.

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

Melhor resposta

0

tente isso:

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

EDIT1:

Tente este tipo de estruturas para ler os seus dados json (funciona bem para mim):

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

e decodificar Results como:

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

graças workingdog - quando eu faço, como sugerido, eu recebo um não se conformando com decodificável erro de protocolo.
boxscorepress.com

A abordagem em minha resposta com a enum CodingKeys de obras. Eu atualizei a minha resposta. P. S: não publique a sua chave secreta, remova-o agora.
workingdog

workingdog - removido chave da API e OBRIGADO!!!! Eu tentei 1000 coisas, mas, aparentemente, não acima. realmente aprecio o seu tempo!!!
boxscorepress.com

fico feliz que está trabalhando. Se a minha resposta foi de uso, pode marcá-lo como correcto, por favor.
workingdog

Eu fiz marcá-lo, mas eu não tenho o suficiente "pontos de reputação" para aceitar a minha marca. Ele disse que observou que, de alguma forma. Obrigado novamente.
boxscorepress.com

oh, eu não sabia que você não pode aceitar uma resposta, quando você postar uma pergunta. Obrigado de qualquer forma.
workingdog

Em outros idiomas

Esta página está em outros idiomas

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