解析用于地理定位的 iOS 应用的 JSON

19 浏览
0 Comments

解析用于地理定位的 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?

0
0 Comments

问题的出现原因:

在给定的代码中,缺少了引号。具体来说,`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应用程序中使用。

0
0 Comments

问题的原因是从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响应,我们可以解决这个问题。

0
0 Comments

问题出现的原因是,原来的代码中使用了NSDictionary作为返回数据的类型,但实际上返回的是一个数组。解决方法是将代码中的NSDictionary替换为Array。这样做可以让我们以数组的形式访问数据。在这种情况下,最好使用Swift的原生类型Array而不是NSArray。这是因为Swift的原生类型更加符合Swift语言的特性。

0