简体   繁体   中英

Parsing JSON arrays in Swift

I'm working with a web API to display information within an iOS application using Swift. Wondering how I can parse something like this inside Swift, using the SwiftyJSON API:

[  
    {  
        "messageID":"7140af4b-3751-38f7-9f34-0f66fab37ad4",
        "messageContent":"{RETRACTED}",
        "messageTimestamp":"7:39:00 PM EDT on 4/19/2016",
        "messageSender":"805a6c70-db41-3218-a885-54a540a31dd0",
        "programTimestamp":"2016-04-19 19:39:00"
    },
    {  
        "messageID":"209c052f-d265-340b-8f76-efa69ea2b17e",
        "messageContent":"{RETRACTED}",
        "messageTimestamp":"3:02:10 PM EDT on 4/18/2016",
        "messageSender":"805a6c70-db41-3218-a885-54a540a31dd0",
        "programTimestamp":"2016-04-18 15:02:10"
    }
]

Current Swift code:

func loadAllMessages() {
    let baseURL = "{RETRACTED}";
    let url = NSURL(string: baseURL);
    let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration());
    let task = session.dataTaskWithURL(url!) { (data, response, error) -> Void in
        if (error == nil) {
            let swiftyJSON = JSON(data: data!);
            let message = Message()
            message.setMessageContent(swiftyJSON["messageContent"].stringValue)
            message.setMessageSender(swiftyJSON["messageSender"].stringValue)
            message.setMessageTimestamp(swiftyJSON["messageTimestamp"].stringValue)
            self.finishLoadingMessage(message.getMessageSender(), message: message)
        } else {
            print ("An unexpected error occurred. Check the baseURL.");
        }
    }
    task.resume()

}

Thanks!

The JSON is an array of dictionaries. Therefore, you have to loop through that array.

Please note, I did not run this code. It might need some tweaking.

if error == nil {
    if let data = data {
        let swiftyJSON = JSON(data: data) 
        for (index, row): (String, JSON) in swiftyJSON {
            let message = Message()
            message.setMessageContent(row["messageContent"].stringValue)
            message.setMessageSender(row["messageSender"].stringValue)
            message.setMessageTimestamp(row["messageTimestamp"].stringValue)
            self.finishLoadingMessage(message.getMessageSender(), message: message)
        }
    }
    else {
        // data should not be nil
        // put error handling here
    }
}
else {
    // some error occurred
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM