100 votes

Comment analyser un fichier JSON dans swift?

J'ai un fichier JSON, je veux analyser et utiliser une liste d'objets en vue tableau. Quelqu'un peut-il partager le code pour analyser le fichier JSON en format swift?

109voto

akashivskyy Points 11508

Ne pourrait être plus simple:

 import Foundation

var error: NSError?
let jsonData: NSData = /* get your json data */

let jsonDict = NSJSONSerialization.JSONObjectWithData(jsonData, options: nil, error: &error) as NSDictionary
 

44voto

Kirit Modi Points 1406

comment Appeler le service Web et vous avez Réponse à swift Vérifier

Faire la Demande d'API

var request: NSURLRequest = NSURLRequest(URL: url)
var connection: NSURLConnection = NSURLConnection(request: request, delegate: self, startImmediately: false)

La préparation pour la réponse

Déclarer Tableau comme ci-dessous

var data: NSMutableData = NSMutableData()

Réception de la réponse

1.

func connection(didReceiveResponse: NSURLConnection!, didReceiveResponse response: NSURLResponse!) {
   // Recieved a new request, clear out the data object
   self.data = NSMutableData()
}

2.

func connection(connection: NSURLConnection!, didReceiveData data: NSData!) {
   // Append the recieved chunk of data to our data object
   self.data.appendData(data)
}

3.

func connectionDidFinishLoading(connection: NSURLConnection!) {
   // Request complete, self.data should now hold the resulting info
   // Convert the retrieved data in to an object through JSON deserialization
   var err: NSError
   var jsonResult: NSDictionary = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.MutableContainers, error: nil) as NSDictionary

   if jsonResult.count>0 && jsonResult["results"].count>0 {
      var results: NSArray = jsonResult["results"] as NSArray
      self.tableData = results
      self.appsTableView.reloadData()

   }
}

Lorsque NSURLConnection reçoit une réponse, on peut s'attendre à la didReceiveResponse méthode à appeler sur notre compte. À ce stade, il suffit de réinitialiser nos données en disant auto.données = NSMutableData(), la création d'un nouveau vide d'objet de Données.

Après une connexion est établie, nous allons commencer à recevoir des données dans la méthode didReceiveData. Les données argument qui est passée ici est l'endroit où tous nos juteux information. Nous avons besoin de s'accrocher à chaque morceau qui vient, ce qui nous ajouter à l'auto.objet de données nous avons dégagé plus tôt.

Enfin, lorsque la connexion est établie et l'ensemble des données a été reçu, connectionDidFinishLoading est appelé et nous sommes prêts à utiliser les données dans notre application. Hourra!

Le connectionDidFinishLoading méthode utilise ici la NSJSONSerialization classe pour convertir nos données brutes en utile Dictionnaire des objets par la désérialisation les résultats de Votre Url.

19voto

dankogai Points 564

Je viens d'écrire une classe appelée JSON, qui rend la gestion JSON dans Swift aussi simple que l'objet JSON dans ES5.

Transformez votre objet swift en JSON comme suit:

 let obj:[String:AnyObject] = [
    "array": [JSON.null, false, 0, "",[],[:]],
    "object":[
        "null":   JSON.null,
        "bool":   true,
        "int":    42,
        "double": 3.141592653589793,
        "string": "a α\t弾\n 

3voto

Prine Points 3573

J'ai aussi écrit une petite bibliothèque spécialisée pour la cartographie de la réponse json dans une structure d'objet. Je suis à l'interne à l'aide de la bibliothèque json-rapide de David Owens. C'est peut-être utile pour quelqu'un d'autre.

https://github.com/prine/ROJSONParser

Exemple Les Employés.json

{
"employees": [
  {
    "firstName": "John",
    "lastName": "Doe",
    "age": 26
  },
  {
    "firstName": "Anna",
    "lastName": "Smith",
    "age": 30
  },
  {
    "firstName": "Peter",
    "lastName": "Jones",
    "age": 45
  }]
}

Comme étape suivante, vous devez créer votre modèle de données (EmplyoeeContainer et de l'Employé).

De l'employé.swift

class Employee : ROJSONObject {

    required init() {
        super.init();
    }

    required init(jsonData:AnyObject) {
        super.init(jsonData: jsonData)
    }

    var firstname:String {
        return Value<String>.get(self, key: "firstName")
    }

    var lastname:String {
        return Value<String>.get(self, key: "lastName")            
    }

    var age:Int {
        return Value<Int>.get(self, key: "age")
    }
}

EmployeeContainer.swift

class EmployeeContainer : ROJSONObject {
    required init() {
        super.init();
    }

    required init(jsonData:AnyObject) {
        super.init(jsonData: jsonData)
    }

    lazy var employees:[Employee] = {
        return Value<[Employee]>.getArray(self, key: "employees") as [Employee]
    }()
}

Ensuite, pour mettre en carte les objets de la réponse JSON, vous n'avez qu'à transmettre les données dans le EmployeeContainer classe en tant que paramètre dans le constructeur. Il ne de créer automatiquement votre modèle de données.

 var baseWebservice:BaseWebservice = BaseWebservice();

  var urlToJSON = "http://prine.ch/employees.json"

  var callbackJSON = {(status:Int, employeeContainer:EmployeeContainer) -> () in
    for employee in employeeContainer.employees {
      println("Firstname: \(employee.firstname) Lastname: \(employee.lastname) age: \(employee.age)")
    }
  }

  baseWebservice.get(urlToJSON, callback:callbackJSON)

La sortie de la console semble alors comme suit:

Firstname: John Lastname: Doe age: 26
Firstname: Anna Lastname: Smith age: 30
Firstname: Peter Lastname: Jones age: 45

2voto

Michael Rapadas Points 560

SwiftJSONParse: Parser JSON comme un badass

Morts-simple et facile à lire!

Exemple: obtenir la valeur "mrap" de nicknames comme une Chaîne de caractères à partir de cette réponse JSON

{
    "other": {
        "nicknames": ["mrap", "Mikee"]
}

Il prend vos données json NSData comme il est, pas besoin de prétraiter.

let parser = JSONParser(jsonData)

if let handle = parser.getString("other.nicknames[0]") {
    // that's it!
}

Avertissement: j'ai fait cela et j'espère que cela aide tout le monde. N'hésitez pas à améliorer!

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X