快速JSON解析
我正在开发一个iOS天气应用程序,需要一些帮助来获取JSON的值。我试图在weather对象中提取id的值。调试时,我得到的值为nil。有人能帮我解释一下逻辑吗?下面是JSON请求和Swift代码快速JSON解析,json,swift,Json,Swift,我正在开发一个iOS天气应用程序,需要一些帮助来获取JSON的值。我试图在weather对象中提取id的值。调试时,我得到的值为nil。有人能帮我解释一下逻辑吗?下面是JSON请求和Swift代码 { "coord":{ "lon":138.93, "lat":34.97 }, "weather":[ { "id":800, "main":"Clear",
{
"coord":{
"lon":138.93,
"lat":34.97
},
"weather":[
{
"id":800,
"main":"Clear",
"description":"clear sky",
"icon":"01n"
}
],
"base":"cmc stations",
"main":{
"temp":292.181,
"pressure":1005.21,
"humidity":100,
"temp_min":292.181,
"temp_max":292.181,
"sea_level":1014.59,
"grnd_level":1005.21
},
"wind":{
"speed":3.41,
"deg":78.0005
},
"clouds":{
"all":0
},
"dt":1464801034,
"sys":{
"message":0.003,
"country":"JP",
"sunrise":1464723086,
"sunset":1464774799
},
"id":1851632,
"name":"Shuzenji",
"cod":200
}
以下是我的Swift片段:
let requestURL: NSURL = NSURL(string: "http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=6361e893fa064b1bfeaca686cd0929cc")!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(urlRequest) {
(data, response, error) -> Void in
let httpResponse = response as! NSHTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200) {
print("JSON Downloaded Sucessfully.")
do{
let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
if let today = json["weather"] as? [[String: AnyObject]] {
//this is pulling 4 key value pairs
for weather in today {
let id = weather["id"] as? String
self.trumpDescription.text=id;
print(id)
}
}
}
catch {
print("Error with Json: \(error)")
}
}
}
task.resume()
}
在您的代码中尝试此选项:let id=weather[“id”]?.stringValue
而不是这个:让id=weather[“id”]as?字符串
看看魔法
编辑以进行解释:因为这个答案对你有用,让我告诉你为什么它有用。
正在从服务器端将id作为整数发送。执行
weather[“id”]
操作时,它返回类型为AnyObject?
的对象。当你做weather[“id”]as时?字符串
转换失败,因此您得到的是零。问题在于您对字符串的转换。如果不将id强制转换为字符串,它会将“800”打印为Int
当您从json获取id并将其转换为字符串时,它将读取字符串并包含新行字符
我在操场上玩耍
因此,您在json中正确地找到了正确的位置,但您需要打开可选项。您也可以使用来打开可选项,这样您就不必有一堆(如果让
):
让id=weather[“id”]as?一串“”
它会将
id
设置为该值,如果不存在,则设置为”
。请清理该缩进:|可以尝试swiftJSON吗?别紧张!使用SwiftyJSON时,代码会因为问号而崩溃(JSON对象是非可选的)。但这是无关紧要的,因为OP没有使用迅捷。我只是在等待提问的人尝试我的答案并给出反馈。非常感谢Rohan Sanap,成功了!非常感谢。如果可能的话,请删除否决票,因为我的答案是正确的并且被接受。你有时间回答另一个问题吗?我正在尝试用JSON解析另一个对象“temp”。同样的要求。它是一个对象而不是数组。你能帮我得到temp对象吗//这就是我困惑的地方,它从一个数组变为一个对象,让temp=json[“temp”]as?字符串self.currentTempView.text=temp;打印(临时)}我不知道你说的是什么意思,它是一个对象而不是数组。数组是对象吗?我看到你把它当作一根弦来弹奏,这是你想要的弦吗?对不起,我正在学习。我只想得到temp的值。id对象在wether数组中,但其他对象不在数组中,它们只是常规对象。我确实希望temp变量是stringi,我在“main”数组中看到一个“temp”对象。在这种情况下,您将使用json[“main”][“temp”]