2015-04-16 154 views
0

我在解析JSON時遇到了一些困難 - 我遵循了從SQL數據庫接收數據的教程。當我嘗試返回並將Array轉換爲Swift時,但是我無法致電Array的任何成員。用Swift解析JSON

斯威夫特:

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