快速JSON解析

快速JSON解析,json,swift,Json,Swift,我正在开发一个iOS天气应用程序,需要一些帮助来获取JSON的值。我试图在weather对象中提取id的值。调试时,我得到的值为nil。有人能帮我解释一下逻辑吗?下面是JSON请求和Swift代码 { "coord":{ "lon":138.93, "lat":34.97 }, "weather":[ { "id":800, "main":"Clear",

我正在开发一个iOS天气应用程序,需要一些帮助来获取JSON的值。我试图在weather对象中提取id的值。调试时,我得到的值为nil。有人能帮我解释一下逻辑吗?下面是JSON请求和Swift代码

{
    "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”]