我正在创建一个应用程序,它应该从数据库中检索一些JSON。
这就是我的JSON的样子:
[{"id":"1","longitude":"10","latitude":"10","visibility":"5","timestampAdded":"2015-10-01 15:01:39"},{"id":"2","longitude":"15","latitude":"15","visibility":"5","timestampAdded":"2015-10-01 15:06:25"}]这是我使用的代码:
if let jsonResult = JSON as? Array<Dictionary<String,String>> {
let longitudeValue = jsonResult[0]["longitude"]
let latitudeValue = jsonResult[0]["latitude"]
let visibilityValue = jsonResult[0]["visibility"]
print(longitudeValue!)
print(latitudeValue!)
print(visibilityValue!)
}如您所见,它只从JSON获得第一个块,如果根本没有JSON,它就会崩溃,但是如果我想让它计数数量,然后像这样从它中生成一个数组:
var longitudeArray = [10, 15]
var latitudeArray = [10, 15]等等..。
我也需要这个苹果手表兼容,所以我不能使用SwiftyJSON。
我做什么好?我真的希望你能帮我!
谢谢。
解决了!
问题被"Eric D.“解决了。
这是代码:
do {
if let url = NSURL(string: "YOU URL HERE"),
let data = NSData(contentsOfURL: url),
let jsonResult = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [[String:AnyObject]] {
print(jsonResult)
let longitudeArray = jsonResult.flatMap { $0["longitude"] as? String }
let latitudeArray = jsonResult.flatMap { $0["latitude"] as? String }
print(longitudeArray)
print(latitudeArray)
}
} catch let error as NSError {
print(error.description)
}谢谢你,埃里克!
发布于 2015-10-08 19:56:50
您可以使用flatMap获取元素的数组:
let longitudeArray = jsonResult.flatMap { $0["longitude"] as? String }
let latitudeArray = jsonResult.flatMap { $0["latitude"] as? String }等。
flatMap类似于map,但需要打开选项,这就足够了,因为我们需要安全地转换json数组中从每个字典中获得的对象的类型。
$0表示应用到的数组的当前flatMap迭代中的对象。
如果您目前使用的是SwiftyJSON,那么应该是:
let longitudeArray = jsonResult.flatMap { $1["longitude"].string }
let latitudeArray = jsonResult.flatMap { $1["latitude"].string }因为.string是SwiftyJSON的可选字符串值getter。
但是正如您所说的,您不想再使用它了,所以您需要使用NSJSONSerialization来解码您的JSON数据,网络上有很多例子。那你就可以用我原来的答案了。
发布于 2015-10-08 18:55:09
您已经得到了一个包含所有元素的数组(不仅仅是第一个元素)。你只需要访问第一个)。jsonResult是一组字典。每个字典(在本例中,基于您提供的json )包含以下元素: id、经度、纬度、可见性和timestampAdded。为了访问每个元素,您可以简单地在jsonResult上循环并访问I‘’th元素(而不是总是0元素)。这还将防止您在json中遇到的崩溃是空的或无效的(因为您将只查看jsonResult中的有效元素。
这将为您提供创建希望创建的自定义数组的灵活性(例如,为了创建一个所有经度的数组,您只需在遍历jsonResult时将该元素添加到新数组中即可)。但是,如果您想省去手工构建这些数组的麻烦,并且假设您可以控制json结构,那么我建议将接收到的json更改为相关的结构(字典或数组而不是字典数组),这样它将更适合您的需要,并以“开箱即用”的相关格式提供结果。
https://stackoverflow.com/questions/33023035
复制相似问题