当前位置: 首页 > 知识库问答 >
问题:

如何从swift调用rest web服务

罗智刚
2023-03-14

JSON似乎打印到浏览器窗口,所以我不完全确定这种方法有什么问题?请谁能提供一些帮助,为什么这可能不起作用?

谢谢

    var url : String = "http://www.flickr.com/services/rest/?method=flickr.test.echo&format=json&api_key=d6e995dee02d313a28ed4b799a09b869"
    var request : NSMutableURLRequest = NSMutableURLRequest()
    request.URL = NSURL(string: url)
    request.HTTPMethod = "GET"

    NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue(), completionHandler:{ (response:NSURLResponse!, data: NSData!, error: NSError!) -> Void in
        var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
        let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary

        if (jsonResult != nil) {
            println(jsonResult);
        } else {
            // couldn't load JSON, look at error
            println(error);
        }
    })

共有1个答案

罗安宁
2023-03-14

问题是,调用返回的数据是JSONP,而不是JSON

如果使用正确的JSON(如http://ip.jsontest.com)进行测试,您的代码将正常工作

要使其与Flickr一起工作,您必须对其进行如下修改:

var json_str:NSString = NSString(data: data, encoding: NSUTF8StringEncoding)


json_str = json_str.substringFromIndex(14)
json_str = json_str.substringToIndex(json_str.length-1)

let new_data:NSData = json_str.dataUsingEncoding(NSUTF8StringEncoding)!


var error: AutoreleasingUnsafeMutablePointer<NSError?> = nil
let jsonResult: NSDictionary! = NSJSONSerialization.JSONObjectWithData(new_data, options:NSJSONReadingOptions.MutableContainers, error: error) as? NSDictionary

if (jsonResult != nil) {
    println(jsonResult);
} else {
    // couldn't load JSON, look at error
    println(error);
}
 类似资料:
  • 问题内容: 我正在尝试从Swift调用CCKeyDerivationPBKDF。 我已经在Project-Bridging-Header.h中导入了所需的标头: (顺便说一句,在我的项目中导入其他Objective C代码时,桥接头似乎正常工作)。 在Xcode中,我可以从.swift文件跳转到此处显示的定义: 最后,当我尝试像这样调用函数时: …我得到这个编译器错误: 无法使用类型为’(CCPB

  • 问题内容: 有没有办法从Swift调用C例程? 许多iOS / Apple库仅是C语言,我仍然希望能够调用它们。 例如,我希望能够从Swift调用objc运行时库。 特别是,如何桥接iOS C标头? 问题答案: 是的,您当然可以与Apples C库进行交互。这里说明了如何。 基本上,C型,C指针等被翻译成对象斯威夫特,例如C 在夫特是一个。 我为另一个问题构建了一个小例子,该例子可以作为对C和Sw

  • 问题内容: 我正在尝试使我的javascript与快速代码交互,但不幸的是我没有成功。 目前,我只是尝试更改标题的颜色并显示一条消息,如下面的代码所示。 这是我的( index.html )代码: 这是我的( main.js -JavaScript )代码: 这是我的( ViewController.swift )代码: 问题答案: 您已正确设置了所有内容,但没有将实例分配给。由于配置包含Java

  • 问题内容: 我正在使用GWT作为Web开发框架。我需要从我的GWT客户端代码访问一些REST服务。我还需要解析JSON(或XML),这是这些服务的响应格式。哪个是解决此问题的最佳方法? 提前致谢。 问题答案: 您可以使用标准GWT调用REST服务(或者如果需要在另一个域上调用服务)。 随着JSON响应字符串,你可以调用获得,它可以是一个,等等,这是在所有可用的这个包。

  • 问题内容: 我有一个带有按钮的HTML页面。当我单击该按钮时,我需要调用REST Web服务API。我尝试在任何地方在线搜索。毫无头绪。有人可以给我牵头/抢先吗?非常感谢。 问题答案: 我很惊讶没有人提到新的FetchAPI,在撰写本文时,除IE11之外,所有浏览器都支持该API。它简化了您在其他许多示例中看​​到的XMLHttpRequest语法。 API包含更多内容,但从方法开始。它有两个参数

  • 我对webservice世界相对来说是个新手,我的研究似乎让我困惑而不是启发,我的问题是我得到了一个库(jar),我必须用一些webservice功能来扩展它。 这个库将共享给其他开发人员,在jar中的类中,将有一个调用webservice的方法的类(该方法实质上设置类的属性,执行一些业务逻辑,如将对象存储在db中等,并将对象与这些修改一起发回)。我希望对这个服务的调用尽可能简单,希望尽可能简单,