ios - serialize - ¿Cómo recorrer JSON con SwiftyJSON?
swiftyjson local json file (4)
En el bucle for, el tipo de key
no puede ser del tipo "title"
. Ya que "title"
es una cadena, ve por: key:String
. Y luego, Inside the Loop puedes usar específicamente "title"
cuando lo necesites. Y también el tipo de subJson
tiene que ser JSON
.
Y como un archivo JSON se puede considerar como una matriz 2D, el json["items''].arrayValue
devolverá múltiples objetos. Es altamente recomendable usar: if let title = json["items"][2].arrayValue
.
Eche un vistazo a: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html
Tengo un json que podría analizar con SwiftyJSON:
if let title = json["items"][2]["title"].string {
println("title : /(title)")
}
Funciona perfectamente.
Pero no pude hacerlo. Probé dos métodos, el primero es
// TUTO :
//If json is .Dictionary
for (key: String, subJson: JSON) in json {
...
}
// WHAT I DID :
for (key: "title", subJson: json["items"]) in json {
...
}
XCode no aceptó la declaración de bucle for.
El segundo método:
// TUTO :
if let appArray = json["feed"]["entry"].arrayValue {
...
}
// WHAT I DID :
if let tab = json["items"].arrayValue {
...
}
XCode no aceptó la sentencia if.
Qué estoy haciendo mal ?
Me parece un poco extraño explicarme, porque en realidad uso:
for (key: String, subJson: JSON) in json {
//Do something you want
}
da errores de sintaxis (en Swift 2.0 al menos)
correcto fue:
for (key, subJson) in json {
//Do something you want
}
Donde de hecho clave es una cadena y subJson es un objeto JSON.
Sin embargo, me gusta hacerlo un poco diferente, aquí hay un ejemplo:
//jsonResult from API request,JSON result from Alamofire
if let jsonArray = jsonResult?.array
{
//it is an array, each array contains a dictionary
for item in jsonArray
{
if let jsonDict = item.dictionary //jsonDict : [String : JSON]?
{
//loop through all objects in this jsonDictionary
let postId = jsonDict!["postId"]!.intValue
let text = jsonDict!["text"]!.stringValue
//...etc. ...create post object..etc.
if(post != nil)
{
posts.append(post!)
}
}
}
}
Por favor revisa el README
//If json is .Dictionary
for (key: String, subJson: JSON) in json {
//Do something you want
}
//If json is .Array
//The `index` is 0..<json.count''s string value
for (index: String, subJson: JSON) in json {
//Do something you want
}
Si desea recorrer la matriz json["items"]
, intente:
for (key, subJson) in json["items"] {
if let title = subJson["title"].string {
println(title)
}
}
En cuanto al segundo método, .arrayValue
devuelve una matriz no Optional
, debe usar .array
en .array
lugar:
if let items = json["items"].array {
for item in items {
if let title = item["title"].string {
println(title)
}
}
}