如何在我的应用程序中获取 JSON 数据

Posted

技术标签:

【中文标题】如何在我的应用程序中获取 JSON 数据【英文标题】:How to get the JSON data in my app 【发布时间】:2015-11-09 17:06:47 【问题描述】:

所以,我想制作一个调用 forecast.io 的 API 以在我的应用中获取天气的应用。有人说我使用 SwiftyJSON 和 Alamofire 。我是编程新手,这是我的第一个应用程序,所以我真的不知道如何正确操作。这是我现在的代码,但我不知道它是否正确,它可以工作但没有调用,我需要输入 JSON 数据来获取“温度”数据:

        // Get Weather
    let URL = "https://api.forecast.io/forecast/apikey/\(lat),\(long)"
    Alamofire.request(.GET, URL, parameters: nil)
        .responseJSON  response in
            let jsonData: AnyObject?
            do 
                jsonData = try NSJSONSerialization.JSONObjectWithData(response.data!, options: [])
             catch  





            

    

它只是说从未使用过“jsonData”。这就是我为接听电话而写的全部内容。

【问题讨论】:

您遇到的问题是什么?能说清楚一点吗? 我不知道如何输入 JSON 来获取像 "temperature" 这样的数据,就像我必须在 "catch" 中输入的语法 【参考方案1】:

一旦你有了jsonData 变量,你就可以像普通的NSDictionary 一样使用它,方法是将以下几行放在第一行之后的do 块中

guard let jsonDict = jsonData as? NSDictionary else return

如果你想得到当前的预测,你所要做的就是

guard let currentForecast = jsonDict["currently"] as? NSDictionary else return

然后你可以使用this link获取它的属性

guard let temperature = currentForecast["apparentTemperature"] as? Int else return

总而言之,你的代码应该是这样的

let URL = "https://api.forecast.io/forecast/apikey/\(lat),\(long)"
Alamofire.request(.GET, URL, parameters: nil)
    .responseJSON  response in
        let jsonData: AnyObject?
        do 
            jsonData = try NSJSONSerialization.JSONObjectWithData(response.data!, options: [])
            guard let jsonDict = jsonData as? NSDictionary else return
            guard let currentForecast = jsonDict["currently"] as? NSDictionary else return
            guard let temperature = currentForecast["apparentTemperature"] as? Int else return
            print(temperature)
         catch  
            //TODO: Handle errors
        

catch 块用于处理错误,因此如果它无法解析 JSON,您将在此处显示一条警告,指出存在错误。

【讨论】:

为什么使用as!?他们当然可以是nul @***foe 我只是在解释它是如何工作的,所以 OP 很清楚。不过我会更新答案。 所以我的代码应该是这样的:' do jsonData = try NSJSONSerialization.JSONObjectWithData(response.data!, options: []) guard let jsonDict = jsonData as? NSDictionary else return 让 currentForecast = jsonDict["currently"] as! NSDictionary 让温度 = currentForecast["apparentTemperature"] 为! Int catch // TODO: 处理错误 ' @kabiroberai @perteadrian 是的。顺便看看我更新的答案,因为它更安全 非常感谢@kabiroberai !!

以上是关于如何在我的应用程序中获取 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章

如何在我的 CSS 中使用存储在 JSON 中的颜色?

从 InAppBrowser IONIC 5 获取 JSON 数据

我需要帮助在我的 android 应用程序中正确显示 json 数据

在我的 laravel 应用程序中从我的 PHP API 获取 json 响应

如何使用 Alamofire 请求在我的 tableView 中显示我的数据

如何从 wp json rest api 获取特定数据