在 Swift 中从 json 解析我的数据有啥问题?
Posted
技术标签:
【中文标题】在 Swift 中从 json 解析我的数据有啥问题?【英文标题】:what is wrong with parsing my data from json in Swift?在 Swift 中从 json 解析我的数据有什么问题? 【发布时间】:2016-11-24 19:07:55 【问题描述】:我正在尝试使用从 Alamofire 获取的数据更新 UITableView
。
我的后端 web 服务返回数据如下:
"hashtags":["test","test2"]
我的“swift”代码如下所示:
Alamofire.request("\(serverURL)/users/\(username)/hashtags")
.validate()
.responseJSON response in
switch response.result
case .success:
DispatchQueue.main.async(execute:
if let jsonData = response.result.value as? [String: AnyObject]
for hashtag in jsonData
print(JSON(hashtag))
print(hashtag)
if let userHashtags = SingleHashtag.fromJSON(JSON(hashtag))
for hash in userHashtags.hashtagText
print(hash)
self.items.add(hash)
函数SingleHashtag.fromJSON
是类的一部分:
class SingleHashtag: NSObject
var hashtagText: [String]
init(hashtagText: [String])
self.hashtagText = hashtagText
super.init()
class func fromJSON(_ json: JSON) -> SingleHashtag?
let hashtagText:[String] = json["hashtags"].arrayValue.map $0.stringValue
return SingleHashtag(hashtagText: hashtagText)
我无法让它工作。问题在于这两行:
print(JSON(hashtag))
print(hashtag)
打印:
unknown
("hashtags", <__NSArrayI 0x170c22200>(
test,
test2
)
)
因为我在那里传递了unknown
,所以其余的代码没有被执行。我在这里错过了什么?
【问题讨论】:
【参考方案1】:您的 JSON 似乎是一个字典,它的唯一键包含一个字符串数组。
您正试图循环遍历您的字典,就好像它是一个数组一样。那是错误的。
尝试像这样使用两步可选绑定:
if let jsonData = response.result.value as? [String: AnyObject],
hashtags = jsonData["hashtags"] as? [String]
for hashtag in hashtags
//your code here
【讨论】:
Duncan,我尝试了您的解决方案,但出现此错误imgur.com/a/X0HVm 好像我无法进行两步绑定... 语法在 Swift 2 和 Swift 3 之间发生了变化,我不记得哪个是正确的。您发布的屏幕截图向您展示了如何修复它。看看你能不能解决这个问题。【参考方案2】:如果您知道 Json 数据的结构将是一个以字符串数组作为其值 ([String: [String]]
) 的字典,您应该将其转换为这样,而不是将其转换为 [String: AnyObject]
。
然后,您可以遍历字典中包含的数组并期望得到字符串值。
if let jsonData = response.result.value as? [String: [String]]
for hashtag in jsonData["hashtags"]
print(hashtag)
// and so on
【讨论】:
以上是关于在 Swift 中从 json 解析我的数据有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Swift 中从 NSDictionary 生成 JSON 数据