2017-10-20 23 views
-4

J'ai un tableau JSON commeComment encoder jsonarray sur Swift 4 ios

[ 
    { 
     "value" : "temp", 
     "value2" : "temp2", 
     "value3" : "temp3", 
    }, 
    { 
     "value" : "temp"; 
     "value2" : "temp2", 
     "value3" : "temp3", 
    }, { 
     "value" : "temp", 
     "value2" : "temp2", 
     "value3" : "temp3", 
    } 
] 

J'essaie d'analyser que le rapide 4 pour l'application ios. Je ne trouve aucune solution à ce sujet. J'ai essayé beaucoup de code comme ça

let jsonpars = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as! [AnyObject] 
+5

La chaîne n'est pas valide JSON. – Aris

+0

S'il vous plaît chercher: [Il ya plus de 2700 questions connexes] (https://stackoverflow.com/search?q=%5Bswift%5D+parse+JSON). Dans Swift 4, vous pouvez utiliser ['JSONDecoder'] (https://developer.apple.com/documentation/foundation/jsondecoder) – vadian

+0

Comme Aris a dit que c'est un mauvais format JSON alors fixez-le d'abord que nous pouvons parler – Ladislav

Répondre

0

Le JSON que vous avez fourni est invalide. Bon format JSON devrait ressembler à ceci:

  1. Remplacer chaque occurrence de = avec :
  2. Remplacer chaque ; par une virgule

Le résultat devrait ressembler à ceci:

[ 
    { 
     "value":"temp", 
     "value2":"temp2", 
     "value3":"temp3", 
    }, 
    ... 
] 

Ensuite, l'exemple de code d'analyse fourni devrait fonctionner correctement.

Votre exemple JSON ressemble à ce qui est imprimé après l'analyse. Par exemple:

let jsonpars = try JSONSerialization.jsonObject(with: jsonData, options: .mutableContainers) as! [AnyObject] 

print(jsonpars) 

résultats dans une version de débogage de JSON:

[{ 
    value = temp; 
    value2 = temp2; 
    value3 = temp3; 
}, { 
... 
] 

Le réel JSON, les données que vous souhaitez analyser, doit avoir et des virgules côlons.

0

En utilisant quicktype, je généré ce modèle et le code de conversion pour votre échantillon (après correction des problèmes de syntaxe):

import Foundation 

struct Value: Codable { 
    let value, value2, value3: String 
} 

extension Array where Element == Value { 
    static func from(json: String, using encoding: String.Encoding = .utf8) -> [Value]? { 
     guard let data = json.data(using: encoding) else { return nil } 
     return [Value].from(data: data) 
    } 

    static func from(data: Data) -> [Value]? { 
     let decoder = JSONDecoder() 
     return try? decoder.decode([Value].self, from: data) 
    } 

    var jsonData: Data? { 
     let encoder = JSONEncoder() 
     return try? encoder.encode(self) 
    } 

    var jsonString: String? { 
     guard let data = self.jsonData else { return nil } 
     return String(data: data, encoding: .utf8) 
    } 
} 

Ensuite, vous pouvez désérialiser comme ceci:

let values = [Value].from(json: """ 
    [ 
     { 
      "value": "temp", 
      "value2": "temp2", 
      "value3": "temp3" 
     }, 
     { 
      "value": "temp", 
      "value2": "temp2", 
      "value3": "temp3" 
     }, 
     { 
      "value": "temp", 
      "value2": "temp2", 
      "value3": "temp3" 
     } 
    ] 
""")!