2017-08-10 1 views
0

Ich bin neu in IOS und ich möchte einige Mix-Daten (Xml und JSON Mix-Daten) von SOAP-Web-Service in Array mit swift 3. empfangen erhalten ich diese Daten in einem String-Variable in der Parser-Methode.Wie konvertiert man XML und JSON Daten in Swift 3

func connection(_ connection: NSURLConnection, didFailWithError error: Error){ 
    print("\(error)") 
    print("Some error in your Connection. Please try again.") 
    let alert = UIAlertController(title: "Error", message: "No internet connection", preferredStyle: UIAlertControllerStyle.alert) 

    // add an action (button) 
    alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.default, handler: nil)) 

    self.present(alert, animated: true, completion: nil) 
} 

func connectionDidFinishLoading(_ connection: NSURLConnection){ 

    print("Received \(UInt(webResponseData.count)) Bytes") 
    // let theXML = String(webResponseData.mutableBytes, length: webResponseData.length, encoding: String.Encoding.utf8) 
    let theXML = XMLParser(data: webResponseData) 
    theXML.delegate = self 
    theXML.parse() 
    print("\(theXML)") 
} 

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String, qualifiedName qName: String, attributes attributeDict: [AnyHashable: Any]){ 
    currentElement = elementName 
    // print(currentElement) 
} 

func parser(_ parser: XMLParser, foundCharacters string: String){ 

    currentElement = string 
    UserDefaults.standard.set(currentElement, forKey: "string") 

    //print(currentElement) 
    // arr.append(currentElement) 
} 

func parser(_ parser: XMLParser,didEndElement elementName: String, namespaceURI: String?,qualifiedName qName: String?){ 

    let sessionelement = UserDefaults.standard.object(forKey: "string") 
    print(sessionelement!) 
} 

hier ist die Antwort von von Web-Service:

[{"Id":2,"imgName":"_U11tmp1464839741959976567.jpg","SeqNo":1}, 
{"Id":1,"imgName":"_U11tmp1464839741959976567.jpg","SeqNo":2}, 
{"Id":3,"imgName":"_U11tmpIMG-14117-WA59976567.jpg","SeqNo":3}] 
+2

Die Antwort in Ihrer Frage ist eine reine 'JSON' Antwort, wo ist der' XML' Teil? Und was ist deine Frage, es scheint, als ob du bereits das Parsing machst? –

+0

ok sir hat es. Ich möchte diese Daten in verschiedenen array.like ID in einem Array und imageName in anderen Array –

+0

wie aus dieser Antwort auf Array abrufen? –

Antwort

0

Dies ist ein funktionierendes Beispiel, ich habe es auf einem Spielplatz getestet haben. Sie müssen Ihren JSON String zunächst in ein Data Objekt konvertieren und dann analysieren.

let jsonString = "[{\"Id\":2,\"imgName\":\"_U11tmp1464839741959976567.jpg\",\"SeqNo\":1},{\"Id\":1,\"imgName\":\"_U11tmp1464839741959976567.jpg\",\"SeqNo\":2},{\"Id\":3,\"imgName\":\"_U11tmpIMG-14117-WA59976567.jpg\",\"SeqNo\":3}]" 
guard let jsonData = jsonString.data(using: .utf8) else {return} 
guard let jsonResponse = (try? JSONSerialization.jsonObject(with: jsonData)) as? [[String:Any]] else {return} 
let idArray = jsonResponse.flatMap{$0["Id"] as? Int} 
let imageNames = jsonResponse.flatMap{$0["imgName"] as? String} 

Um dies zu in Zusammenhang mit Ihrem Code zu setzen:

func parser(_ parser: XMLParser, didStartElement elementName: String, namespaceURI: String, qualifiedName qName: String, attributes attributeDict: [AnyHashable: Any]){ 
    currentElement = elementName 
    guard let jsonData = currentElement.data(using: .utf8) else {return} 
    guard let jsonResponse = (try? JSONSerialization.jsonObject(with: jsonData)) as? [[String:Any]] else {return} 
    let idArray = jsonResponse.flatMap{$0["Id"] as? Int} 
    let imageNames = jsonResponse.flatMap{$0["imgName"] as? String} 
} 
+0

Ich habe es überprüft, aber es wird Fehler geben, wenn ich dies verwenden let IDArray = jsonResponse.flatMap {$ 0 ["Id"]} –

+0

Fehler ist Typ hat kein Subskript-Mitglied –

+0

ich benutze meine Antwort nicht diesen Code für Response-Wächter lassen Sie JsonResponse = (versuchen? JSONSerialization.jsonObject (von: Daten)) als? [[String: Any]] else {return} –

Verwandte Themen