arrays - 我想在 SWIFTUI 的特定位置开始解析 json 文件
问题描述
我有这个 json,我的意图是只获取“municipios”数组。
{
"title": "Municipios de Pontevedra",
"provincia": "Pontevedra",
"codprov": "36",
"metadescripcion": "Lista de municipios de la provincia de Pontevedra | Seleccionar un muncipio",
"keywords": "Lista de municipios, Previsión meteorológica para los municipios de la provincia de Pontevedra , El tiempo",
"municipios": [
{
"CODIGOINE": "36001000000",
"ID_REL": "1360010",
"COD_GEO": "36010",
"CODPROV": "36",
"NOMBRE_PROVINCIA": "Pontevedra",
"NOMBRE": "Arbo",
"POBLACION_MUNI": 2904,
"SUPERFICIE": 4266,
"PERIMETRO": 33435,
"CODIGOINE_CAPITAL": "36001011101",
"NOMBRE_CAPITAL": "O Pazo",
"POBLACION_CAPITAL": "286",
"HOJA_MTN25": "0262-2",
"LONGITUD_ETRS89_REGCAN95": -8.31474568,
"LATITUD_ETRS89_REGCAN95": 42.11276572,
"ORIGEN_COORD": "Mapa",
"ALTITUD": 113,
"ORIGEN_ALTITUD": "MDT5",
"DISCREPANTE_INE": 0
},
{
"CODIGOINE": "36002000000",
"ID_REL": "1360025",
"COD_GEO": "36020",
"CODPROV": "36",
"NOMBRE_PROVINCIA": "Pontevedra",
"NOMBRE": "Barro",
"POBLACION_MUNI": 3705,
"SUPERFICIE": 3763.6494,
"PERIMETRO": 31578,
"CODIGOINE_CAPITAL": "36002041301",
"NOMBRE_CAPITAL": "Santo Antoniño",
"POBLACION_CAPITAL": "426",
"HOJA_MTN25": "0152-4",
"LONGITUD_ETRS89_REGCAN95": -8.62642506,
"LATITUD_ETRS89_REGCAN95": 42.55592981,
"ORIGEN_COORD": "Mapa",
"ALTITUD": 143,
"ORIGEN_ALTITUD": "MDT5",
"DISCREPANTE_INE": 0
},...
我已尝试使用此代码,但由于数组问题,它给了我一个错误。我认为这应该是一个数组,但 json 是一个字典,因为它以 { 字符开头,对吗?
import Foundation
import Foundation
import SwiftUI
struct Municipio: Codable,Identifiable{
let id = UUID()
let NOMBRE: String
let POBLACION_MUNI: Int
}
class apiCall {
func getMunicipios(completion:@escaping ([Municipio]) -> ()) {
guard let url = URL(string: "urltojson") else { return }
URLSession.shared.dataTask(with: url) { (data, _, _) in
let municipios = try! JSONDecoder().decode([Municipio].self, from: data!)
print(municipios)
DispatchQueue.main.async {
completion(municipios)
}
}
.resume()
}
}
我的意图是获得“municipios”的数组
解决方案
谢谢你们,你们告诉我必须解析整个文档,这真的帮助了我。这是我完美运行的结果代码。
struct JSONObject: Codable {
let title: String
let provincia: String
let codprov: String
let metadescripcion: String
let keywords: String
let municipios: [Municipio]
}
struct Municipio: Codable,Identifiable{
let id = UUID()
let CODIGOINE: String
let NOMBRE: String
let POBLACION_MUNI: Int
}
class Api {
func getObject(completion:@escaping ([Municipio]) -> ()) {
guard let url = URL(string: "https://www.el-tiempo.net/api/json/v2/provincias/36/municipios") else { return }
URLSession.shared.dataTask(with: url) { (data, _, _) in
let objeto = try! JSONDecoder().decode(JSONObject.self, from: data!)
let municipios = objeto.municipios
print(municipios)
DispatchQueue.main.async {
completion(municipios)
}
}
.resume()
}
}