我试图使用以下代码在Swift中调用json网络服务,并tableview
在Swift IOS中显示它。
/*declared as global*/ var IdDEc = [String]() // string array declared globally
//inside viewdidload
let url = NSURL(string: "http://192.1.2.3/PhpProject1/getFullJson.php")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
let json1 = NSString(data: data!, encoding: NSUTF8StringEncoding)
print("json string is = ",json1) // i am getting response here
let data = json1!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
do {
let json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSArray
for arrayData in json {
let notId = arrayData["ID"] as! String
self.IdDEc.append(notId)
}
print(" id = ",IdDEc) //here i am getting values
} catch let error as NSError {
print("Failed to load: \(error.localizedDescription)")
}
print(" id out count = ",self.IdDEc.count) //here also
}
print(" id out count = ",self.IdDEc.count) // not here
task.resume()
我将数组IdDEc声明为全局数组,但该数组的作用域仅位于NSURLSession内,
我也想使用此数组来填充tableview。这是示例json输出文件
[
{"ID":"123" , "USER":"philip","AGE":"23"},
{"ID":"344","USER":"taylor","AGE":"29"},
{"ID":"5464","USER":"baker","AGE":"45"},
{"ID":"456","USER":"Catherine","AGE":"34"}
]
我是个新手,请帮助
这个想法是使用“回调”。
在这里,我为您想要获得的NSArray做了一个:
completion: (dataArray: NSArray)->()
我们创建一个获取数组的函数,并将此回调添加到函数的签名中:
func getDataArray(urlString: String, completion: (dataArray: NSArray)->())
数组准备就绪后,我们将使用回调:
completion(dataArray: theNSArray)
完整功能如下所示:
func getDataArray(urlString: String, completion: (dataArray: NSArray)->()) {
if let url = NSURL(string: urlString) {
NSURLSession.sharedSession().dataTaskWithURL(url) {(data, response, error) in
if error == nil {
if let data = data,
json1 = NSString(data: data, encoding: NSUTF8StringEncoding),
data1 = json1.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false) {
do {
let json = try NSJSONSerialization.JSONObjectWithData(data1, options: [])
if let jsonArray = json as? NSArray {
completion(dataArray: jsonArray)
}
} catch let error as NSError {
print(error.localizedDescription)
}
} else {
print("Error: no data")
}
} else {
print(error!.localizedDescription)
}
}.resume()
}
}
现在我们像这样使用此函数,不再有异步问题:
getDataArray("http://192.1.2.3/PhpProject1/getFullJson.php") { (dataArray) in
for dataDictionary in dataArray {
if let notId = dataDictionary["ID"] as? String {
self.IdDEc.append(notId)
}
}
print("id out count = ", self.IdDEc.count)
}
Swift 3 更新+修复和改进。
func getContent(from url: String, completion: @escaping ([[String: Any]])->()) {
if let url = URL(string: url) {
URLSession.shared.dataTask(with: url) { (data, response, error) in
if error == nil {
if let data = data {
do {
let json = try JSONSerialization.jsonObject(with: data, options: [])
if let content = json as? [[String: Any]] { // array of dictionaries
completion(content)
}
} catch {
// error while decoding JSON
print(error.localizedDescription)
}
} else {
print("Error: no data")
}
} else {
// network-related error
print(error!.localizedDescription)
}
}.resume()
}
}
getContent(from: "http://192.1.2.3/PhpProject1/getFullJson.php") { (result) in
// 'result' is what was given to 'completion', an array of dictionaries
for dataDictionary in result {
if let notId = dataDictionary["ID"] as? String {
// ...
}
}
}
问题内容: 我正在与Retrofit和GSON合作。我有一个作为JSON数组的JSON响应,但我不知道如何使用模型类来解析它。我的回答如下: 问题答案: 只需在回调中调用字符串列表,它就可以完成工作…
问题内容: 我正在尝试解析以下JSON 这是我从Web服务获取的JSON,并且我正在使用以下代码对其进行解析: 我收到以下错误 该操作无法完成。(NSURLErrorDomain错误-1005。)致命错误:在展开可选值时意外发现nil 我该如何解决? 问题答案: 您的网址返回了以下JSON- 最外面的方括号表示根对象是一个数组,因此尝试将JSON解析的结果强制转换为NSDictionary会导致问
问题内容: 我正在尝试解析JSON但收到此错误: 在没有更多上下文的情况下,表达类型不明确 我的代码是: 在没有尝试捕获的情况下,在Xcode 6.4中可以正常工作,但是在Xcode 7中则无法工作。 问题答案: 不要为已解码对象声明类型,因为您希望它是an,并且您正在执行转换来做到这一点。 另外,最好将零选项用于NSJSONSerialization而不是随机选项。 在我的示例中,我还使用了一个
问题内容: 我有一个Json Array作为没有名称的字符串,我想解析它如何在android中进行? 我的JsonArray是: 问题答案: 试试这个..
问题内容: 输出: 我有api调用返回的结果,它就像对象数组(json数组)的复杂格式。我需要通过golang解析该结果,我该如何实现?以下数据是我的结果,它是从api调用获取的。 问题答案: 您仅错过了一点:您需要导出结构的字段: 它将起作用(在Go Playground上尝试): 请注意,JSON文本包含带有小写字母文本的字段名称,但是包足够“聪明”以匹配它们。如果它们完全不同,则可以使用st
问题内容: 我正在使用一个API,该API返回如下所示的JSON 在Swift中,我使用两个函数来获取并解析JSON 然后我用 可以很好地解析JSON。当我打印出 我得到了数组的所有内容。但是,我无法访问每个单独的索引。我很肯定这是一个数组,因为我之间 返回正确的长度。但是,如果我尝试通过使用访问单个索引 XCode关闭语法高亮显示并给我以下信息: 并且代码将无法编译。 这是XCode 6的错误,