Saturday, 29 April 2017

Json Get & POST using Swift 3.0

Json Get & POST using Swift 3.0



Add This In info.plist :-

    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
        <true/>
    </dict>


Get Data Using Json File  :-


Add .json File in Bundle Like This :



{
    "MONDAY": [
               {
               "TITLE": "TEST DRIVEN DEVELOPMENT",
               "SPEAKER": "JASON SHAPIRO",
               "TIME": "9:00 AM",
               "ROOM": "MATISSE",
               "DETAILS": "EXPLORE THE TOPICS AND TOOLS RELATED TO TEST DRIVEN DEVELOPMENT."
               },
               {
               "TITLE": "JAVA TOOLS",
               "SPEAKER": "JIM WHITE",
               "TIME": "9:00 AM",
               "ROOM": "ROTHKO",
               "DETAILS": "DISCUSS THE LATEST SET OF TOOLS USED TO HELP EASE SOFTWARE DEVELOPMENT."
               }
               ],
    "TUESDAY": [
                {
                "TITLE": "MONGODB",
                "SPEAKER": "DAVINMICKELSON",
                "TIME": "1: 00PM",
                "ROOM": "PICASSO",
                "DETAILS": "LEARNABOUT\"NOSQL\"DATABASES."
                },
                {
                "TITLE": "DEBUGGINGWITHXCODE",
                "SPEAKER": "JASONSHAPIRO",
                "TIME": "1: 00PM",
                "ROOM": "VANGOGH",
                "DETAILS": "EXPLOREDIFFERENTPATTERNSFORDEBUGGINGYOURIOSAPPS."
                }
                ],
    "WEDNESDAY": [
                  {
                  "TITLE": "SCRUM MASTER",
                  "SPEAKER": "DAVIN MICKELSON",
                  "TIME": "1:00 PM",
                  "ROOM": "MATISSE",
                  "DETAILS": "LEARN THE ROLES AND RESPONSIBILITIES OF A SCRUM MASTER"
                  },
                  {
                  "TITLE": "DESIGN PATTERNS",
                  "SPEAKER": "JIM WHITE",
                  "TIME": "1:00 PM",
                  "ROOM": "ROTHKO",
                  "DETAILS": "APPLY BEST PRACTICES AND SOUND ARCHITECTURES TO SOFTWARE DESIGN."
                  }
                  ]
}



Coding Part : -





import UIKit

class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate
{
    
    var arrDict :NSMutableArray=[]
    
    @IBOutlet weak var tvJSON: UITableView!
    
    override func viewDidLoad()
    {
        super.viewDidLoad()
        
             
        //-------------- Get Method
        
       
            jsonParsingFromFile()
   
    }
      
    func jsonParsingFromFile()
    {
        let path: NSString = Bundle.main.path(forResource: "days", ofType: "json")! as NSString
        let data : Data = try! Data(contentsOf: URL(fileURLWithPath: path as String), options: NSData.ReadingOptions.dataReadingMapped)
        
        self.startParsing(data)
    }
    
    func startParsing(_ data :Data)
    {
        let dict: NSDictionary!=(try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)) as! NSDictionary
        
        print(dict)
        
        for i in 0  ..< (dict.value(forKey: "MONDAY") as! NSArray).count 
        {
            arrDict.add((dict.value(forKey: "MONDAY") as! NSArray) .object(at: i))
        }
        for i in 0  ..< (dict.value(forKey: "TUESDAY") as! NSArray).count 
        {
            arrDict.add((dict.value(forKey: "TUESDAY") as! NSArray) .object(at: i))
        }
        for i in 0  ..< (dict.value(forKey: "WEDNESDAY") as! NSArray).count 
        {
            arrDict.add((dict.value(forKey: "WEDNESDAY") as! NSArray) .object(at: i))
        }
        tvJSON .reloadData()
    }
    
    func numberOfSections(in tableView: UITableView) -> Int
    {
        return 1
    }
    
    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
    {
        return arrDict.count
    }
    
    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
    {
        let cell : TableViewCell! = tableView.dequeueReusableCell(withIdentifier: "Cell") as! TableViewCell
        let strTitle : NSString=(arrDict[indexPath.row] as AnyObject).value(forKey: "TITLE") as! NSString
        let strDescription : NSString=(arrDict[indexPath.row] as AnyObject).value(forKey: "DETAILS") as! NSString
        cell.lblTitle.text=strTitle as String
        cell.lbDetails.text=strDescription as String
        return cell as TableViewCell
    }
}





Get Method Using URL :- 




@IBOutlet weak var tvJSON: UITableView!
    
    override func viewDidLoad()
    {
        super.viewDidLoad()
        
        
        //-------------- Get Method
       
            jsonParsingFromURL()

    }
       
    func jsonParsingFromURL () {
        let url = URL(string: "https://api.github.com/users/mralexgray")
        let request = URLRequest(url: url!)
        
        NSURLConnection.sendAsynchronousRequest(request, queue: OperationQueue.main) {(response, data, error) in
            self.startParsing(data!)
        }
    }
    
    
    func startParsing(_ data :Data)
    {
        let dict: NSDictionary!=(try! JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers)) as! NSDictionary
        
        print(dict)

   }




Json POST Method :-



Method 1 :-


 //----------------------------------   post Method
        
        //------------------------ Method 1
        
        
        let json: [String: Any] = ["title": "ABC",
                                   "dict": ["1":"First", "2":"Second"]]
        
        let jsonData = try? JSONSerialization.data(withJSONObject: json)
        
        // create post request
        let url = URL(string: "http://httpbin.org/post")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        
        // insert json data to the request
        request.httpBody = jsonData
        
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data, error == nil else {
                print(error?.localizedDescription ?? "No data")
                return
            }
            let responseJSON = try? JSONSerialization.jsonObject(with: data, options: [])
            if let responseJSON = responseJSON as? [String: Any] {
                print(responseJSON)
            }
        }
        
        task.resume()
        
        
Method 2 :-


        //------------------------ Method 2
        
        
        let json: [String: Any] = ["title": "ABC",
                                   "dict": ["1":"First", "2":"Second"]]
        
        
        
        do {
            
            let jsonData = try JSONSerialization.data(withJSONObject: json, options: .prettyPrinted)
            
            // create post request
            let url = NSURL(string: "http://httpbin.org/post")!
            let request = NSMutableURLRequest(url: url as URL)
            request.httpMethod = "POST"
            
            // insert json data to the request
            request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
            request.httpBody = jsonData
            
            
            let task = URLSession.shared.dataTask(with: request as URLRequest){ data, response, error in
                if error != nil{
                    print("Error -> \(error)")
                    return
                }
                
                do {
                    let result = try JSONSerialization.jsonObject(with: data!, options: []) as? [String:AnyObject]
                    
                    print("Result -> \(result)")
                    
                } catch {
                    print("Error -> \(error)")
                }
            }
            
            task.resume()

        } catch {
            print(error)
        }
        
        

Method 3 :-

        
        //------------------------ Method 3
        
        
        var request = URLRequest(url: URL(string: "http://httpbin.org/post")!)
        request.httpMethod = "POST"
        let postString = "title=ABC&dict=1"
        request.httpBody = postString.data(using: .utf8)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            guard let data = data, error == nil else {                                                 // check for fundamental networking error
                print("error=\(error)")
                return
            }
            
            if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
                print("statusCode should be 200, but is \(httpStatus.statusCode)")
                print("response = \(response)")
            }
            
            let responseString = String(data: data, encoding: .utf8)
            print("responseString = \(responseString)")
        }
        task.resume()












No comments:

Post a Comment