从MongoLab收集并解析JSON

时间:2015-09-15 18:49:13

标签: ios json swift rest mlab

我正在使用将使用MongoLab作为mongodb主机的应用。我找到了这个教程:Devdactic,我很容易让它在我自己的计算机上本地工作。问题是,我想使用自己的MongoLab API,而不是该教程中提供的api。我的API路径如下所示:

https://api.mongolab.com/api/1/databases/DBName/collections/CollName?apiKey=MyAPIKey

返回此JSON:

[ { "_id" : { 
        "$oid" : "55f853a2e4b0d8eab7e4a058"
    } , 
    "coordinate" : { 
        "latitude" : "123" , 
        "longitude" : "456"
    }
} ]

是的,我知道,它不是一个非常先进的JSON,只是看看它是否有效。

我的代码是用Swift编写的,从教程中我创建了一个如下所示的RestAPIManager类:

typealias ServiceResponse = (JSON, NSError?) -> Void

class RestApiManager: NSObject {
static let sharedInstance = RestApiManager()
let baseURL = "https://api.mongolab.com/api/1/databases/DBName/collections/CollName?apiKey=MyAPIKey"

func getCoordinate(onCompletion: (JSON) -> Void) {
    let route = baseURL
    makeHTTPGetRequest(route, onCompletion: { json, err in
        onCompletion(json as JSON)
    })
}

func makeHTTPGetRequest(path: String, onCompletion: ServiceResponse) {
    let request = NSMutableURLRequest(URL: NSURL(string: path)!)

    let session = NSURLSession.sharedSession()

    let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
        let json:JSON = JSON(data: data)
        onCompletion(json, error)
    })
    task.resume()
  }
}

然后我尝试"得到"这个API在ViewController中的响应,点击按钮点击:

@IBAction func addBuoyButtonClick(sender: AnyObject) {

    getDataFromAPI()

}

func getDataFromAPI(){     
    RestApiManager.sharedInstance.getCoordinate { json in
        let results = json["coordinate"]
        for (index: String, subJson: JSON) in results {
            let latitude: AnyObject = subJson["latitude"].object

            let alert = UIAlertView()
            alert.title = "Latitude: "
            alert.message = "Lat: " + latitude.string as String
            alert.addButtonWithTitle("Ok")
            alert.show()

        }
    }
}

为了查看它是否有效,我尝试在警报视图中提醒响应。结果什么都没有!警报视图甚至无法显示。

很抱歉很长的帖子,但我认为用一些实际的代码而不是疯狂的猜测会更好! :P

0 个答案:

没有答案