2015-04-16 2 views
0

Я столкнулся с некоторыми трудностями при разборе JSON - я следил за учебником для получения данных из базы данных SQL. Когда я попытаюсь вернуться и Array перейдем к Swift, все в порядке, НО я не могу назвать каких-либо членов Array.Parse JSON with Swift

Swift:

let myUrl = NSURL(string: "XXXXXXXXXXXXXXXX.Fr"); 
let request = NSMutableURLRequest(URL:myUrl!); 
request.HTTPMethod = "POST"; 

// Compose a query string 
let postString = "Pseudo=\(PseudoVar)"; 

request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding); 

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
    data, response, error in 

    if error != nil { 
     println("error=\(error)") 
     return 
    } 

    // You can print out response object 
    println("response = \(response)") 

    // Print out response body 
    let responseString = NSString(data: data, encoding: NSUTF8StringEncoding) 
    println("responseString = \(responseString)") 

    //Let's convert response sent from a server side script to a NSDictionary object: 

    var err: NSError? 
    var json = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error:&err) as? NSDictionary 

    if let parseJSON = json { 
     // Now we can access value of First Name by its key 
     var firstNameValue = parseJSON["firstName"] as? String 
     println("firstNameValue: \(firstNameValue)") 
    }  
} 
task.resume() 

PHP (упрощенный):

<?php 
    array("Pseudo0" => "Hello", "Pseudo1" => "Good Morning"); 
    echo json_encode($returnValue);    
?> 

Любые советы будут полезны.

ответ

2

Проблема в том, что у вас нет ответа Dictionary - это Array. Но он также может использовать словарь в зависимости от ответа сервера. Таким образом, вам нужно будет проверить, что ответ - это словарь или массив. Ваш код должен обрабатывать это, например, например:

if let jsonArray = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error:&err) as? [NSDictionary] { 
    for jsonDict in jsonArray { 
     var firstNameValue = jsonDict["firstName"] as? String 
     println("firstNameValue: \(firstNameValue)") 
    } 
} else if let jsonDict = NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves, error:&err) as? NSDictionary { 
    var firstNameValue = jstonDict["firstName"] as? String 
    println("firstNameValue: \(firstNameValue)") 
}  
+0

Спасибо, это сработало! –

+1

мое удовольствие. Это просто, чтобы избежать этой ошибки. Если сервер отправляет объект signle или массив – Saad