Swift JSON

 

 

 

Sending HTTP POST Body

 


    func requestUser(completion: @escaping(User) -> Void){
        let url = URLBuilder.user()
        var request = URLRequest(url:url)
        var jsonData = Data()

        request.httpMethod = "POST"
        request.addValue("application/json",forHTTPHeaderField: "Content-Type")
        request.addValue("application/json",forHTTPHeaderField: "Accept")
        
        do {
            /* encodeing convert object to JSON */
            print("attempting to encoded userDict")
            let jsonEncoder = JSONEncoder()
            jsonData = try jsonEncoder.encode(user)
            print("successfully encoded userDict")
            print("jsonData:   ", jsonData)

        } catch{print("Failed to serialize ...")}      
        
        request.httpBody = jsonData
        
        let task = session.dataTask(with:request){ (data,response,error) in
            guard let unwrapped_data = data else{print("no data"); return}
            do {
                print("attempting to decode")
                /* decode convert JSON to object */
                let jsonDecoder = JSONDecoder()
                let user_response = try jsonDecoder.decode(User.self, from: unwrapped_data)
                print("** successfullly decoded response")
                OperationQueue.main.addOperation {
                    completion(user_response)
                }
                
            } catch { print("error json-ing"); return}
        }
        task.resume()
    }

 

If this example doesn’t work make sure what you are coding is not nil.

 

 

JSON Encoding

struct Dog: Codable {

    var name: String

    var owner: String

}

 

// Encode

let dog = Dog(name: "Rex", owner: "Etgar")

 

let jsonEncoder = JSONEncoder()

let jsonData = try jsonEncoder.encode(dog)

let json = String(data: jsonData, encoding: String.Encoding.utf8)

 

 

JSON Decoding

// Decode

let jsonDecoder = JSONDecoder()

let secondDog = try jsonDecoder.decode(Dog.self, from: jsonData)

 

Source: https://stackoverflow.com/questions/29599005/how-to-serialize-or-convert-swift-objects-to-json

 

JSON Serialization

What is this

Stackoverflow suggests always use JSONDecoding instead of Serialization

 

It seems for sending httpbody request you can use jsonEncoding