2015-04-16 156 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