Ich habe seit Tagen gesucht, um eine ziemlich einfache JSON-Zeichenfolge in einen Objekttyp in Swift zu konvertieren, aber ohne Erfolg.
Hier ist der Code für den Webdienstaufruf:
func GetAllBusiness() {
Alamofire.request(.GET, "http://MyWebService/").responseString { (request, response, string, error) in
println(string)
}
}
Ich habe eine schnelle Struktur Business.swift:
struct Business {
var Id : Int = 0
var Name = ""
var Latitude = ""
var Longitude = ""
var Address = ""
}
Hier ist mein Testdienst bereitgestellt:
[
{
"Id": 1,
"Name": "A",
"Latitude": "-35.243256",
"Longitude": "149.110701",
"Address": null
},
{
"Id": 2,
"Name": "B",
"Latitude": "-35.240592",
"Longitude": "149.104843",
"Address": null
}
...
]
Es wäre eine Freude, wenn mich jemand durch diese Sache führen würde.
Vielen Dank.
AnyObject
per Schlüssel, stellen Sie jedoch sicher, dass dies nicht der Fall ist, bevor Sie auf String übertragennil
. Aus diesem Grund kann ich Sie mit!
oder in meinem Fall?
mit Holdplace??
var b:Business = Business()
außerhalb der Seitenschleife erstellen , werden möglicherweise in jedem Listenelement dieselben Daten angezeigt.für schnelle 3/4
Anwendungsbeispiel:
quelle
do-catch
,try?
kann hier verwendet werden, das das gleiche Ergebnis wie die Rückkehr null in gebencatch
.extension String { func toJSON() -> Any? { guard let data = self.data(using: .utf8, allowLossyConversion: false) else { return nil } return try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) } }
Als einfache String-Erweiterung sollte genügen:
Dann:
quelle
Swift 4 analysiert JSON viel eleganter. Nehmen Sie einfach das codierbare Protokoll für Ihre Struktur gemäß diesem vereinfachten Beispiel an:
Um das JSON-Array zu analysieren, teilen Sie dem Decoder mit, welche Objekte das Datenarray enthält
Hier ist ein voll funktionsfähiges Beispiel:
Weitere Hintergrundinformationen finden Sie in dieser hervorragenden Anleitung .
quelle
Für Swift 4
Ich habe die Logik von @ Passkit verwendet , musste aber gemäß Swift 4 aktualisieren
Schritt 1: Erweiterung für String-Klasse erstellt
Schritt 2 So habe ich es in meinem View Controller verwendet
Das gesamte Guthaben geht an den ursprünglichen Benutzer. Ich habe gerade die neueste schnelle Version aktualisiert
quelle
Ich habe eine Bibliothek geschrieben, die das Arbeiten mit JSON-Daten und die Deserialisierung in Swift zum Kinderspiel macht. Sie können es hier herunterladen : https://github.com/isair/JSONHelper
Bearbeiten: Ich habe meine Bibliothek aktualisiert. Jetzt können Sie Folgendes tun:
Alte Antwort:
Verwenden Sie zunächst anstelle von .responseString .response, um ein Antwortobjekt abzurufen. Ändern Sie dann Ihren Code in:
Und Sie müssen eine Business-Klasse wie diese erstellen:
Die vollständige Dokumentation finden Sie auf meinem GitHub-Repo. Habe Spaß!
quelle
Für Swift 4 habe ich diese Erweiterung mit dem Codable- Protokoll geschrieben:
quelle
Für
iOS 10
&Swift 3
mit Alamofire & Gloss :und hier ist die Kategorieklasse
IMO, dies ist bei weitem die eleganteste Lösung.
quelle
String in NSData konvertieren
Konvertieren Sie NSData in AnyObject
quelle
Ich mag die Antwort von RDC, aber warum sollte der zurückgegebene JSON nur Arrays auf der obersten Ebene enthalten? Ich musste ein Wörterbuch auf der obersten Ebene zulassen, also habe ich es folgendermaßen geändert:
quelle
SWIFT4 - Einfache und elegante Methode zum Dekodieren von JSON-Zeichenfolgen in Struct.
Erster Schritt - Codieren Sie den String in Daten mit der .utf8-Codierung.
Als dekodieren Ihre Daten zu YourDataStruct.
quelle
Sie können swift.quicktype.io zum Konvertieren
JSON
in entwederstruct
oder verwendenclass
. Sogar Sie können die Version von Swift to Genrate Code erwähnen.Beispiel JSON:
Generierter Code:
quelle
Mit der SwiftyJSON- Bibliothek könnten Sie es so machen
quelle
Hier ist ein Beispiel, mit dem Sie die Dinge einfacher und einfacher machen können. Meine String-Daten in meiner Datenbank sind eine JSON-Datei, die folgendermaßen aussieht:
Befolgen Sie diese einfachen Schritte, um diese JSON-Zeichenfolgendaten zu laden. Erstellen Sie zunächst eine Klasse für mein MoreData-Objekt wie folgt:
Zweitens erstellen Sie meine String-Erweiterung für meinen JSON-String wie folgt:
Drittens erstellen Sie die My Srevices-Klasse, um meine String-Daten wie folgt zu verarbeiten:
Rufen Sie abschließend diese Funktion vom View Controller aus auf, um Daten wie folgt in die Tabellenansicht zu laden:
quelle
Es könnte jemandem helfen. Ähnliches Beispiel.
Dies ist unsere
Codable
Klasse zum Binden von Daten. Sie können diese Klasse einfach mit SwiftyJsonAccelerator erstellenDies ist Json String
Hier konvertieren wir zu einem schnellen Objekt.
quelle