Это должно быть мини-приложение pokedex, которое содержит покемонов.У меня много проблем с анализом этого конкретного JSON ....
{
count: 949,
next: null,
previous: null,
results: [
{
name: "bulbasaur",
url: "https://pokeapi.co/api/v2/pokemon/1/"
},
{
name: "ivysaur",
url: "https://pokeapi.co/api/v2/pokemon/2/"
},
{
name: "venusaur",
url: "https://pokeapi.co/api/v2/pokemon/3/"
},
{
name: "charmander",
url: "https://pokeapi.co/api/v2/pokemon/4/"
},
{
name: "charmeleon",
url: "https://pokeapi.co/api/v2/pokemon/5/"
},
{
name: "charizard",
url: "https://pokeapi.co/api/v2/pokemon/6/"
},
{
name: "squirtle",
url: "https://pokeapi.co/api/v2/pokemon/7/"
},
{
name: "wartortle",
url: "https://pokeapi.co/api/v2/pokemon/8/"
},
{
name: "blastoise",
url: "https://pokeapi.co/api/v2/pokemon/9/"
},
{
name: "caterpie",
url: "https://pokeapi.co/api/v2/pokemon/10/"
},
{
name: "metapod",
url: "https://pokeapi.co/api/v2/pokemon/11/"
},
из https://pokeapi.co/api/v2/pokemon/
Это в основном JSON с несколькими URL-адресами.Исходный JSON содержит некоторые данные - массив структур покемонов.У меня нет проблем с разбором этого, но я даже не знаю, с чего начать с дополнительного URL.
первый бит данного внутреннего URL выглядит следующим образом (вся вещь огромна)
{
abilities: [
{
ability: {
name: "chlorophyll",
url: "https://pokeapi.co/api/v2/ability/34/"
},
is_hidden: true,
slot: 3
},
{
ability: {
name: "overgrow",
url: "https://pokeapi.co/api/v2/ability/65/"
},
is_hidden: false,
slot: 1
}
],
base_experience: 64,
forms: [
{
name: "bulbasaur",
url: "https://pokeapi.co/api/v2/pokemon-form/1/"
}
],
game_indices: [
{
game_index: 1,
version: {
name: "white-2",
url: "https://pokeapi.co/api/v2/version/22/"
}
},
{
game_index: 1,
version: {
name: "black-2",
url: "https://pokeapi.co/api/v2/version/21/"
}
},
{
game_index: 1,
version: {
name: "white",
url: "https://pokeapi.co/api/v2/version/18/"
}
},
{
game_index: 1,
из https://pokeapi.co/api/v2/pokemon/1/
Дело в том, что мне нужно толькоизвлечь определенные атрибуты из второго.Не уверен, как извлечь некоторые и игнорировать другие.Это то, что у меня есть до сих пор ...
struct Pokedex: Decodable {
let count: Int?
let next: Bool?
let previous: Bool?
let results: [Results]
}
struct Results: Decodable {
let name: String?
lt url: String?
}
struct Pokemon : Decodable {
let weight: Int?
let height: Int?
}
struct endPokemon {
let name: String
let weight: Int
let height: Int
}
(вес и рост указаны во втором URL, но позже вниз по странице)
var pokemons = [Pokemon]()
func loadJSON() {
let url = "https://pokeapi.co/api/v2/pokemon/"
guard let urlObj = URL(string: url) else { return }
URLSession.shared.dataTask(with: urlObj) {(data, response, error) in
guard let data = data else { return }
do {
let pokedex = try JSONDecoder().decode(Pokedex.self, from: data)
for pokemon in pokedex.results {
guard let jsonURL = pokemon.url else { return }
guard let newURL = URL(string: jsonURL) else { return }
URLSession.shared.dataTask(with: newURL) {(data, response, error) in
guard let data = data else { return }
do {
let load = try JSONDecoder().decode(Pokemon.self, from: data)
self.pokemons.append(load)
} catch let jsonErr {
print("Error serializing inner JSON:", jsonErr)
}
}
}
} catch let jsonErr{
print("Error serializing JSON: ", jsonErr)
}
}.resume()
Я не получаю никакихошибки работают, но массив pokemons пуст.
Есть мысли ??