2017-05-09 3 views
-3

Ich rufe eine API in swift 3. Und von der API bekomme ich Antwort im JSON-String-Format. Wie konvertiert man diese JSON String in Dictionary oder Array in Swift. Außerdem enthält diese JSON-Zeichenfolge weitere Arrays und Wörterbücher.JSON Antwort vom Server in Swift

Ich habe versucht mit EVReflection Werkzeug. Es konvertiert nur das obere JSON-Objekt im Wörterbuch. Die verschachtelten Wörterbücher und Arrays sind immer noch im String-Format.

+1

Ich schlage vor, Sie SwiftyJson verwenden. Es ist eine unglaubliche Bibliothek. –

+0

Es gibt auch einen Blog-Post von Apple darüber: https://developer.apple.com/swift/blog/?id=37 –

+0

Werfen Sie einen Blick auf: http://stackoverflow.com/questions/30480672/how- to-convert-a-json-Zeichenfolgen-zu-einem-Wörterbuch – carlito

Antwort

0

Versuchen so etwas, Antwort ist [String: Alles] so müssen Sie auf einen beliebigen Typ umgewandelt

DispatchQueue.main.async { 
    do { 
     if let json = try JSONSerialization.jsonObject(with: data!, options: .allowFragments) as? [String: Any] { 
      let j = json as NSDictionary 
      guard let resp = response as? HTTPURLResponse 
       else { 
        // No response from server 
        return 
      } 

      if resp.statusCode == 200 { 
       // You can put here some callback, this is a data you need 
      } else { 
       // Here is some error 
      } 
     } 
    } catch { 
     // And this is a error from server 
    } 
} 
+0

Typumwandlung von Swift 'Dictionary' zu Foundation' NSDictionary' verwirft die Typinformation. Tu das nicht. – vadian

+0

@vadian Ich stimme zu, aber ich denke, es ist für eine Frage der Frage in Ordnung, um eine Idee zu bekommen. – miff

+1

Es ist eine bessere Idee, nur Swift native Collection-Typen – vadian

0

Sie sollten jsonData erhalten, die Sie direkt jsonSerialization versuchen.

Wenn aus irgendeinem Grund Sie es als JSON-String empfangen, dann müssen Sie auf jsonData diese Zeichenfolge konvertieren erste

// Here you have to convert Json String to jsonData 
// if it's not Json String then skip this line 
let jsonData = jsonString.data(using: .utf8) 

// Try to convert it to json object 
do { 
     let json = try JSONSerialization.jsonObject(with: jsonData, options: []) as! [String : Any] 
     // now you can try to parse your json 


     } catch let error as NSError { 
      print(error.localizedDescription) 
     } 

Oder als @Jay Verwendung erwähnt Swiftyjson

+0

vorschlagen 'Sie müssen diese Zeichenfolge in jsonData ändern' Nein, sie müssen JSON-Daten vom Server an erster Stelle anstelle einer JSON-Zeichenfolge erhalten. ;) – Moritz

+0

Meine Antwort basiert auf der Frage Konvertiere die JSON-Zeichenfolge in ein richtiges Json-Objekt. Es kann viele Gründe geben, Ihren json als String zu haben, den Sie manuell zurück in json Daten konvertieren müssen. –

+0

Ich habe nicht gesagt, dass deine Antwort falsch ist (das einzige "Problem" deiner Antwort ist, dass dieser Inhalt bereits viele, viele Male gegeben wurde). Was ich sage ist, dass diese JSON-Zeichenkette oft aus JSON-Daten besteht ... was zu nutzlosen Konvertierungen führt. Allgemeiner Fehler OP sollte sich dessen bewusst sein. – Moritz