我将如何使用 SwiftyJSON 解析这种类型的 JSON?
Posted
技术标签:
【中文标题】我将如何使用 SwiftyJSON 解析这种类型的 JSON?【英文标题】:How would I parse this type of JSON using SwiftyJSON? 【发布时间】:2015-09-06 02:53:47 【问题描述】:[
"ID": 0,
"Name": "PHI"
,
"ID": 0,
"Name": "ATL"
]
我正在使用 SwiftyJSON 和 Alamofire。这就是被退回的东西。我现在想在我的代码中遍历这些对象中的每一个。不过,我在获取此信息时遇到了麻烦。
json[0]["Name"].string 似乎返回 nil,我不知道为什么。 JSON 对象肯定会获取 JSON,当我将它打印到控制台时,它看起来与上面完全一样。
我也试过了:
var name = json[0].dictionary?["Name"]
但仍然为零。
有什么想法吗?
编辑
这是我用来检索 JSON 的代码。
Alamofire.request(.GET, "url", parameters: nil, encoding: .JSON, headers: nil).responseJSON
(request, response, data, error) in
var json = JSON(data!)
//var name = json[0].dictionary?["Name"]
【问题讨论】:
你试过打印json[0]
吗?
是的,json[0] 也是 nil。
如果 json[0] 为 nil,那么我认为格式化和/或检索有问题
您能否发布从检索数据到尝试解析数据的所有代码?
我刚刚将用于检索的代码添加到我的原始帖子中。
【参考方案1】:
您的 JSON 是有效的(至少这个 sn-p 是有效的),并且您从 SwiftyJSON 检索数据的第一个方法是正确的。
另一方面,你展示的 Alamofire sn-p 没有为我编译,我不得不更改签名。
鉴于在 cmets 中您说不仅 json[0]["Name"]
为零,而且json[0]
也为零,我认为您的数据获取方式存在问题。
我在一个示例应用中测试了这个版本的 Alamofire 方法,它运行良好:
Alamofire.request(.GET, yourURL).responseJSON(options: nil) (request, response, data, error) in
let json = JSON(data!)
let name = json[0]["Name"].string
println(name)
在屏幕截图中,URL 是我的本地服务器,您的 JSON 副本粘贴在“test.json”中。
这个“答案”是我评论的延伸,我需要空间来显示更多信息...
【讨论】:
嗯.. 如果我按照您对我的 URL 所做的方式格式化我的请求,它就不再返回 JSON。数据为零。 好的。我猜我们正在使用不同版本的 Alamofire,那么。也许你身边还有别的东西。 // 我认为现在你应该多调试一下,检查每一个看起来不错但实际上是错误的步骤(经典陷阱)。类似 1- 使用 Alamofire alone 验证它是否返回数据。 2-验证此数据是您的有效 json。 3-你能用 NSJSONSerializtion 打印结果吗? 4-你能用 SwiftyJSON 做吗?等等。 如果您打印 json 对象,它对您来说是什么样的?我的看起来像这样:["ID":0,"Name":"Philadelphia","ID":0,"Name":"NFL"] 我有same,唯一的区别是它“打印得很漂亮”(缩进)。 提示:您可以像这样验证从 Alamofire 获得的 json 数据是否有效:print(NSJSONSerialization.isValidJSONObject(data!))
【参考方案2】:
我想你可以试试这个。
首先使用 swifyJSON 转换 JSON(数据)
let json = JSON(data!)
然后统计data中的数组元素。
let count: Int? = json.array?.count
之后使用 for 循环到达数组元素一。
for index in 0...count-1
self.idArray.append(json[index]["ID"].stringValue)
self.nameArray.append(json[index]["Name"].stringValue)
您将在“idArray”和“nameArray”中获得排序数据。尝试打印两个数组。
【讨论】:
【参考方案3】:您不必使用索引来解析数组。您可以从数组中获取单个 json 对象并使用它来访问数据:
for (index: String, subJson: JSON) in json
println("Current Index = \(index)")
if let _id = subJson["ID"].int
println("ID = \(_id)")
else
println("Error ID")
if let _name = subJson["Name"].string
println("Name = \(_name)")
else
println("Error Name")
【讨论】:
以上是关于我将如何使用 SwiftyJSON 解析这种类型的 JSON?的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 iOS 7 下使用 SwiftyJSON 解析 JSON 数据时出现未知类型
IOS应用程序性能太慢,无法使用swiftyjson解析数据[关闭]