解析JSON使用Swift 3解析另一个JSON数组中的一个对象的数组3
问题描述:
我对Swift和iOS非常陌生,并且正在学习如何使用REST API调用。电话正常工作,我可以获取数据。我看不到正确解析整个数据。我正试图获得这些国家和他们的电话代码。我成功解析了国名并将它们存储在一个数组中,但出于某种原因,我无法解析包含每个国家/地区的调用代码的数组对象。解析JSON使用Swift 3解析另一个JSON数组中的一个对象的数组3
这里的JSON响应,我从API
[
{
name: "Afghanistan",
topLevelDomain: [
".af"
],
alpha2Code: "AF",
alpha3Code: "AFG",
callingCodes: [
"93"
],
capital: "Kabul",
altSpellings: [
"AF",
"Afġānistān"
],
region: "Asia",
subregion: "Southern Asia",
population: 27657145,
latlng: [
33,
65
],
demonym: "Afghan",
area: 652230,
gini: 27.8,
timezones: [
"UTC+04:30"
],
borders: [
"IRN",
"PAK",
"TKM",
"UZB",
"TJK",
"CHN"
],
nativeName: "افغانستان",
numericCode: "004",
currencies: [
{
code: "AFN",
name: "Afghan afghani",
symbol: "؋"
}
],
languages: [
{
iso639_1: "ps",
iso639_2: "pus",
name: "Pashto",
nativeName: "پښتو"
},
{
iso639_1: "uz",
iso639_2: "uzb",
name: "Uzbek",
nativeName: "Oʻzbek"
},
{
iso639_1: "tk",
iso639_2: "tuk",
name: "Turkmen",
nativeName: "Türkmen"
}
],
translations: {
de: "Afghanistan",
es: "Afganistán",
fr: "Afghanistan",
ja: "アフガニスタン",
it: "Afghanistan",
br: "Afeganistão",
pt: "Afeganistão"
},
flag: "https://restcountries.eu/data/afg.svg",
regionalBlocs: [
{
acronym: "SAARC",
name: "South Asian Association for Regional Cooperation",
otherAcronyms: [ ],
otherNames: [ ]
}
]
},
.....
]
在这里得到的是我曾尝试
func getData2() {
let urlString = "https://restcountries.eu/rest/v2/all"
let url = URL(string: urlString)
URLSession.shared.dataTask(with:url!) { (data, response, error) in
if error != nil {
print(error!)
} else {
do {
let parsedData = try JSONSerialization.jsonObject(with: data!) as! [[String:Any]]
// let countryNames = parsedData.flatMap { $0["name"] as? String }
//let countryCodes = parsedData.flatMap { $0["callingCodes"] as? String }
for country in parsedData {
if let name = country["name"] as? String {
self.countryNamesArray.append(name)
}
if let capital = country["capital"] as? String {
print(capital)
}
if let code = country["callingCodes"] as? [[String:Any]] {
print("Got Here: ", code)
// why I get nothing here?
for tag in code {
print(tag)
// I get nothing here as well
}
}
//self.countryCodesArray.append(code)
}
}
//print(self.countryNamesArray)
// print(self.countryCodesArray)
self.searchTextField.filterStrings(self.countryNamesArray)
} catch let error as NSError {
print(error)
}
}
}.resume()
}
从Android背景的人,我认为这将是可能的索引数组和得到那个位置上的物品,但是这不起作用。请不要介意,因为我只是一个初学者,并且尽我所能学习Swift。
任何帮助,将不胜感激。
感谢
答
进行这一更改代码
if let code = country["callingCodes"] as? [String] {
// if you want only first index use this
if code.count > 0{
let countryCode = code[0]
print("First index Country Code",countryCode)
self.countryCodesArray.append(countryCode)
}
}
真棒感谢,它的工作原理。我还有一个问题。一些呼叫代码多于一个,例如[“1809”,“1829”,“1849”],但我只想使用第一个。我如何索引第一个值? –
我会编辑我的答案,请看看 –
谢谢。一些国家代码是空的,但是即使在检查字符串是否为空之后,它也会发出索引错误。我如何检查调用代码是否存在以避免索引问题? –