Simple and clean way to convert JSON string to Object in Swift

前端 未结 16 1241
挽巷
挽巷 2020-11-28 23:27

I have been searching for days to convert a fairly simple JSON string to an object type in Swift but with no avail.

Here is the code for web service call:



        
16条回答
  •  半阙折子戏
    2020-11-29 00:16

    For Swift 4

    I used @Passkit's logic but i had to update as per Swift 4


    Step.1 Created extension for String Class

    import UIKit
    
    
    extension String
        {
            var parseJSONString: AnyObject?
            {
                let data = self.data(using: String.Encoding.utf8, allowLossyConversion: false)
    
                if let jsonData = data
                {
                    // Will return an object or nil if JSON decoding fails
                    do
                    {
                        let message = try JSONSerialization.jsonObject(with: jsonData, options:.mutableContainers)
                        if let jsonResult = message as? NSMutableArray
                        {
                            print(jsonResult)
    
                            return jsonResult //Will return the json array output
                        }
                        else
                        {
                            return nil
                        }
                    }
                    catch let error as NSError
                    {
                        print("An error occurred: \(error)")
                        return nil
                    }
                }
                else
                {
                    // Lossless conversion of the string was not possible
                    return nil
                }
            }
        }
    

    Step.2 This is how I used in my view controller

    var jsonString = "[\n" +
        "{\n" +
        "\"id\":72,\n" +
        "\"name\":\"Batata Cremosa\",\n" +            
        "},\n" +
        "{\n" +
        "\"id\":183,\n" +
        "\"name\":\"Caldeirada de Peixes\",\n" +            
        "},\n" +
        "{\n" +
        "\"id\":76,\n" +
        "\"name\":\"Batata com Cebola e Ervas\",\n" +            
        "},\n" +
        "{\n" +
        "\"id\":56,\n" +
        "\"name\":\"Arroz de forma\",\n" +            
    "}]"
    
     //Convert jsonString to jsonArray
    
    let json: AnyObject? = jsonString.parseJSONString
    print("Parsed JSON: \(json!)")
    print("json[2]: \(json![2])")
    

    All credit goes to original user, I just updated for latest swift version

提交回复
热议问题