解析用于地理定位的 iOS 应用的 JSON
解析用于地理定位的 iOS 应用的 JSON
我正在尝试为iPhone开发一个应用程序,它应该使用用nodejs + MongoDB编写的webservice。该应用程序使用Swift编写,但现在我有一个问题,我无法正确解析数据。
目前我有如下代码:
var endpoint = NSURL(string: self.url + "?latitud=" + self.latitude + "&longitud=" + self.longitude)
var data = NSData(contentsOfURL: endpoint!)
var error: NSError? = nil
if let json: NSDictionary = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers, error: &error) as? NSDictionary {
for place in json {
var name = place["obj"]["name"]
var coords = place["obj"]["coords"]
var annotation = MKPointAnnotation()
annotation.title = name as? String
annotation.coordinate = coords as? CLLocationCoordinate2D
map.addAnnotation(annotation)
}
}
不幸的是它不工作 🙁
webservice的响应如下:
[
{
"dis": 1.22,
"obj": {
"name": "一些名称",
"coords": [
-97.1228,
17.4049
],
"phones": [
"555 555 55555",
"444 444 44444"
],
"address": {
"street": "一些街道",
"zip": "00000"
}
}
},
{
"dis": 2.03,
"obj": {
"name": "其他名称",
"coords": [
-97.0910,
17.7099
],
"phones": [
"777 777 7777"
],
"address": {
"street": "其他街道",
"zip": "11111"
}
}
}
]
我做错了什么吗?
有没有更优雅(尤其是更高效)的方式来请求API RESTful?
问题的出现原因:
在给定的代码中,缺少了引号。具体来说,`place["obj"]["coords]`中的引号被遗漏了。
解决方法:
正确的代码应该是`place["obj"]["coords"]`,在这里添加了缺失的引号。这样就可以正确地解析JSON并获得所需的地理位置信息。
以下是整理后的文章:
在这段代码中,我不了解Swift,但我认为你在代码中忘记了引号...
`var coords = place["obj"]["coords]`
也许应该是:
`var coords = place["obj"]["coords"]`
在这段代码中,发现了一个错误,即在`place["obj"]["coords]`中缺少了引号。为了解决这个问题,我们需要在缺失的地方添加引号。这样就可以正确地解析JSON并获得所需的地理位置信息。
正确的代码应该是`place["obj"]["coords"]`,这样就可以将JSON解析为地理位置信息,然后在iOS应用程序中使用。
问题的原因是从web服务返回的响应数据是一个JSONArray,但是应该将其转换为NSArray而不是NSDictionary。解决方法是修改代码中的一行代码,将NSDictionary改为NSArray。
解决方法是尝试使用Unirest这个轻量级HTTP客户端来进行RESTful API调用和解析JSON响应。Unirest是一个很好的工具,可以帮助我们处理这个问题。
Unirest的使用方法如下:
1. 下载并导入Unirest库。
2. 使用以下代码创建一个RESTful API请求:
let request = Unirest.get("http://your-api-endpoint")
3. 发送请求并处理响应:
request.asJson { response in
if let json = response.body {
// 解析JSON响应
}
}
通过将NSArray和NSDictionary进行转换,并使用Unirest库来处理RESTful API调用和解析JSON响应,我们可以解决这个问题。