我目前正在尝试从URL下载,解析和打印JSON。到目前为止,我到了这一点:
1)一个类(JSONImport.swift),它处理我的导入:
var data = NSMutableData();
let url = NSURL(string:"http://headers.jsontest.com");
var session = NSURLSession.sharedSession();
var jsonError:NSError?;
var response : NSURLResponse?;
func startConnection(){
let task:NSURLSessionDataTask = session.dataTaskWithURL(url!, completionHandler:apiHandler)
task.resume();
self.apiHandler(data,response: response,error: jsonError);
}
func apiHandler(data:NSData?, response:NSURLResponse?, error:NSError?)
{
do{
let jsonData : NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary;
print(jsonData);
}
catch{
print("API error: \(error)");
}
}
我的 问题 是,
do{
let jsonData : NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary;
print(jsonData);
}
保持为空。当我调试时,连接将以给定的url作为参数成功启动。但是我的jsonData变量没有被打印。相反,catch块引发错误,指出我的变量中没有数据:
API error: Error Domain=NSCocoaErrorDomain Code=3840 "No value."
有人可以帮我吗?我想念什么?
提前非常感谢大家!
[从NSURL Connection切换到NSURLSession后编辑]
这是有关如何将NSURLSession与非常方便的“完成处理程序”一起使用的示例。
该函数包含网络调用,并具有“完成处理程序”(数据何时可用的回调):
func getDataFrom(urlString: String, completion: (data: NSData)->()) {
if let url = NSURL(string: urlString) {
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithURL(url) { (data, response, error) in
// print(response)
if let data = data {
completion(data: data)
} else {
print(error?.localizedDescription)
}
}
task.resume()
} else {
// URL is invalid
}
}
您可以在新函数内使用“跟踪闭包”这样使用它:
func apiManager() {
getDataFrom("http://headers.jsontest.com") { (data) in
do {
let json = try NSJSONSerialization.JSONObjectWithData(data, options: [])
if let jsonDict = json as? NSDictionary {
print(jsonDict)
} else {
// JSON data wasn't a dictionary
}
}
catch let error as NSError {
print("API error: \(error.debugDescription)")
}
}
}
我希望有人能帮忙。 在一台全新的windows机器上。在下载和运行最新版本的eclipse(indigo)之前,我已经下载并安装了java jdk。 3: 4:
问题内容: 我正在使用Bottle编写一个API ,到目前为止,一切都很棒。但是,在尝试返回JSON数组时遇到了一个小障碍。这是我的测试应用程序代码: 当我运行它并请求每条路线时,我会从前两条路线得到我期望的JSON响应: /单 / containsarray 因此,我曾期望返回一个字典列表来创建以下JSON响应: 但是,请求路线只会导致错误。我在做什么错,如何以这种方式返回JSON数组? 问题答
我想写一些java代码使用Spring引导消耗JSON数据从一个特定的endpoint。然而,对于每个请求,响应可能返回不同的数据字段。 等等 下面是我当前的代码,它处理第一个案例。我可以写另一个Rates.java来满足第二个案例等等,但是我希望有一个Rates.java文件来处理所有可能的案例。 LiveData。JAVA 费率。JAVA 消费Rest.java(主)
我在HBASE有一张桌子。我和菲尼克斯一起创造的 然后我用spark填充它(我使用hortonworks shc-core连接器): 多谢帮忙。
问题内容: 我正在尝试解析JSON但收到此错误: 在没有更多上下文的情况下,表达类型不明确 我的代码是: 在没有尝试捕获的情况下,在Xcode 6.4中可以正常工作,但是在Xcode 7中则无法工作。 问题答案: 不要为已解码对象声明类型,因为您希望它是an,并且您正在执行转换来做到这一点。 另外,最好将零选项用于NSJSONSerialization而不是随机选项。 在我的示例中,我还使用了一个
我正在使用谷歌方向,以便获得一条带有航路点的路线。我从之前对Places Api的调用中获得了航路点的名称。问题是如果我打这个电话: https://maps.googleapis.com/maps/api/directions/json?origin=46.779704,23.577261 它返回一条路线。但如果在航路点上增加了克卢伊·纳波卡国家剧院,通话内容如下: https://maps.g