首页 > 解决方案 > 我想在 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”的数组

标签: arraysjsonparsingswiftui

解决方案


谢谢你们,你们告诉我必须解析整个文档,这真的帮助了我。这是我完美运行的结果代码。

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()
    }
}

推荐阅读