gpt4 book ai didi

iOS 9 JSON 解析循环

转载 作者:行者123 更新时间:2023-11-29 01:35:23 24 4
gpt4 key购买 nike

我正在创建一个应该从数据库中检索一些 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 中获取第一个 block ,如果根本没有 JSON,它会崩溃,但如果我希望它计算数量并从中创建一个数组,如下所示:

var longitudeArray = [10, 15]
var latitudeArray = [10, 15]

等等...

我还需要它与 Apple Watch 兼容,所以我不能使用 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)
}

非常感谢埃里克!! :-)

最佳答案

您可以使用 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 数据,Web 和 SO 上有很多示例。然后你就可以使用我原来的答案了。

关于iOS 9 JSON 解析循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33023035/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com