2016-10-09 17 views
6

मैं JSON इस तरह लग रही है साथ पार्स JSON उत्तर:स्विफ्ट 3

{"posts": 
    [ 
    { 
    "id":"1","title":"title 1" 
    }, 
    { 
    "id":"2","title":"title 2" 
    }, 
    { 
    "id":"3","title":"title 3" 
    }, 
    { 
    "id":"4","title":"title 4" 
    }, 
    { 
    "id":"5","title":"title 5" 
    } 
    ], 
    "text":"Some text", 
    "result":1 
} 

मैं कैसे पार्स कर सकते हैं कि स्विफ्ट 3 के साथ JSON?

मैं इस है:

let url = URL(string: "http://domain.com/file.php")! 
let request = URLRequest(url: url) 

let task = URLSession.shared.dataTask(with: request) { data, response, error in 
    guard let data = data else { 
     print("request failed \(error)") 
      return 
    } 

    do { 
     if let json = try JSONSerialization.jsonObject(with: data) as? [String: String], let result = json["result"] { 
      // Parse JSON 
     } 
    } catch let parseError { 
     print("parsing error: \(parseError)") 
     let responseString = String(data: data, encoding: .utf8) 
      print("raw response: \(responseString)") 
     } 
    } 
    task.resume() 
} 

उत्तर

11

का प्रयोग करें।

+0

मुझे खाली मिल गया ऐप में प्रतिक्रिया। '2016-10-09 05: 02: 28.148 9 47 ऐप का नाम [15760: 381303] [] tcp_connection_get_statistics DNS: प्रारंभ होने के बाद से 16ms/2 9ms, टीसीपी: 178ms/223ms प्रारंभ होने के बाद से, टीएलएस: 0ms/0ms से शुरू होने के बाद [ ] '। क्या आप यह भी जानते हैं कि 'टेक्स्ट' और' प्रतिक्रिया' मान कैसे प्राप्त करें? धन्यवाद – user3051755

+0

@ user3051755, पोस्ट शब्दकोशों की एक सरणी लौटाते हैं (अपना जेसन देखें) तो मैंने पोस्ट = json ["posts"] को अपडेट किया है? [[स्ट्रिंग: कोई भी]] ?? []। इसके बजाय नया कोड आज़माएं और इसे आपके लिए काम करना चाहिए। –

+0

धन्यवाद, अब यह 'पदों' के लिए काम करता है! मैं 'टेक्स्ट' और' परिणाम' के मूल्य कैसे प्राप्त कर सकता हूं? मैंने कोशिश की 'टेक्स्ट = जेसन ["पाठ"] के रूप में? [स्ट्रिंग: स्ट्रिंग] प्रिंट (टेक्स्ट) 'लेकिन परिणामस्वरूप यह 'nil' प्रिंट करता है। – user3051755

0

क्योंकि परीक्षण json के अपने डेटा संरचना होना चाहिए "[स्ट्रिंग: AnyObject]"। जेसन कुंजी "पोस्ट" मान ऐरे प्रकार है। आप डेटा है और उस त्रुटि खाली है अगर जाँच करने के लिए

let url = URL(string: "http://domain.com/file.php") 
URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error) in 
    guard let data = data, error == nil else { return } 

    do { 
     let json = try JSONSerialization.jsonObject(with: data, options: .allowFragments) as! [String:Any] 
     let posts = json["posts"] as? [[String: Any]] ?? [] 
     print(posts) 
    } catch let error as NSError { 
     print(error) 
    } 
}).resume() 

उपयोग guard: यह आपके डेटा पार्स करने के लिए

1

GET पद्धति के लिए तेज 3.0 में:

var request = URLRequest(url: URL(string: "Your URL")!)   

    request.httpMethod = "GET" 
    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=\(String(describing: 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 = \(String(describing: response))") 
     } 

     let responseString = String(data: data, encoding: .utf8) 
     print("responseString = \(String(describing: responseString))") 
    } 
    task.resume() 

POST पद्धति के लिए तेजी से 3.0 में:

var request = URLRequest(url: URL(string: "Your URL")!) 

    request.httpMethod = "POST" 
    let postString = "user_name=ABC" // Your parameter 
    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=\(String(describing: 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 = \(String(describing: response))") 
     } 

     let responseString = String(data: data, encoding: .utf8) 
     print("responseString = \(String(describing: responseString))") 
    } 
    task.resume() 
-2

दूरी - मुश्किल एपीआई ======== ================>

class ViewController: UIViewController { 

    var get_data = NSMutableData() 

    var get_dest = NSArray() 

    var org_add = NSArray() 

    var row_arr = NSArray() 



    var ele_arr = NSArray() 

    var ele_dic = NSDictionary() 

    var dist_dic = NSDictionary() 

    var dur_dic = NSDictionary() 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     // Do any additional setup after loading the view, typically from a nib. 

     getmethod() 

    } 



    func getmethod() 

    { 

     let url_str = URL(string: "https://maps.googleapis.com/maps/api/distancematrix/json?units=imperial&departure_time=1408046331&origins=37.407585,-122.145287&destinations=37.482890,-122.150235") 

     let url_req = URLRequest(url: url_str!) 

     let task = URLSession.shared.dataTask(with: url_req) { (data, response, error) in 

      if let my_data = data 

      { 

       print("my data is----->",my_data) 

       do 

       { 

        self.get_data.append(my_data) 

        let jsondata = try JSONSerialization.jsonObject(with: self.get_data as Data, options: [])as! NSDictionary 

        print("json data is--->",jsondata) 



      self.get_dest = jsondata.object(forKey: "destination_addresses")as! NSArray 



      let get_dest1:String = self.get_dest.object(at: 0) as! String 

        print("destination is--->",get_dest1) 

      self.org_add = jsondata.object(forKey: "origin_addresses")as! NSArray 



      let get_org:String = self.org_add.object(at: 0)as! String 

        print("original address is--->",get_org) 



      self.row_arr = jsondata.object(forKey: "rows")as! NSArray 

      let row_dic = self.row_arr.object(at: 0)as! NSDictionary 



      self.ele_arr = row_dic.object(forKey: "elements")as! NSArray 



      self.ele_dic = self.ele_arr.object(at: 0)as! NSDictionary 



      self.dist_dic = self.ele_dic.value(forKey: "distance")as! NSDictionary 

      print("distance text is--->",self.dist_dic.object(forKey: "text")as! String) 

      print("distance value is--->",self.dist_dic.object(forKey: "value")as! Int) 



      // self.ele_dic = self.ele_arr.object(at: 1)as! NSDictionary 



      self.dur_dic = self.ele_dic.value(forKey: "duration")as! NSDictionary 



      print("duration text--->",self.dur_dic.value(forKey: "text")as! String) 

      print("duration value--->",self.dur_dic.value(forKey: "value")as! Int) 



       print("status---->",self.ele_dic.object(forKey: "status")as! String) 



       } 

       catch 

       { 

        print("error is--->",error.localizedDescription) 

       } 

      } 

     };task.resume() 



    }