【问题标题】:Swift and JSON parsing only an object not an arraySwift 和 JSON 只解析一个对象而不是一个数组
【发布时间】:2016-06-03 14:50:45
【问题描述】:

我正在开发一个解析 JSON 数据并将我的标签文本设置为 JSON 请求的临时值的天气应用程序。我从天气对象数组中获得了 id 的值,但是 temp 不在数组中,它只是一个对象。有人可以告诉我我错在哪里。我的价值是零,因为我没有正确获取它。这是我的 sn-p 和 JSON。

@IBAction func getWeather(sender: AnyObject) {
        let requestURL: NSURL = NSURL(string: "http://api.openweathermap.org/data/2.5/weather?lat=35&lon=139&appid=MYAPPID")!
        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 {

                            //this works
                            let id = weather["id"]?.stringValue
                            self.trumpDescription.text=id;
                            print(id)

                            //this is where I am confused it changes from an array to just an object
                            let temp = json["temp"] as? String
                            self.currentTempView.text=temp;
                            print(temp)
                        }

                    }

                }

                catch {
                    print("Error with Json: \(error)")
                }

            }
        }

        task.resume()
    }`

这是 JSON:

{
    "coord": {
    "lon": 138.93,
    "lat": 34.97
    },
    "weather": [
    {
    "id": 803,
    "main": "Clouds",
    "description": "broken clouds",
    "icon": "04n"
    }
    ],
    "base": "cmc stations",
    "main": {
    "temp": 292.581,
    "pressure": 1019.48,
    "humidity": 99,
    "temp_min": 292.581,
    "temp_max": 292.581,
    "sea_level": 1028.92,
    "grnd_level": 1019.48
    },
    "wind": {
    "speed": 5.36,
    "deg": 237.505
    },
    "clouds": {
    "all": 64
    },
    "dt": 1464964606,
    "sys": {
    "message": 0.0037,
    "country": "JP",
    "sunrise": 1464895855,
    "sunset": 1464947666
    },
    "id": 1851632,
    "name": "Shuzenji",
    "cod": 200
    }

【问题讨论】:

标签: ios arrays json swift


【解决方案1】:

应该是这样的

if let main = json["main"] as? NSDictionary {
    let temp = main["temp"] as! String
    print(temp)
}

【讨论】:

  • 感谢您的示例,我现在理解了逻辑。谢谢。
【解决方案2】:

而不是这个:
let temp = json["temp"] as? String

试试这个:

if let main = json["main"] as? [String: AnyObject] {
    let temp = main[temp]?.stringValue
    print(temp)

    //alternatively you can try this as per your convenience of data type
    let tempNew = main[temp]?.doubleValue
    print(tempNew) 
}

【讨论】:

    猜你喜欢
    • 2015-06-10
    • 1970-01-01
    • 1970-01-01
    • 2013-07-07
    • 2017-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    相关资源
    最近更新 更多