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
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 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
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()

