在 Swift 中解析来自 json 的数据有什么问题?
what is wrong with parsing my data from json in Swift?
我正在尝试使用从 Alamofire 获取的数据更新 UITableView
。
我的后端webservice returns数据如下:
{"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:
的一部分
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 { [=14=].stringValue}
return SingleHashtag(hashtagText: hashtagText)
}
}
我无法让它工作。问题是这两行:
print(JSON(hashtag))
print(hashtag)
打印:
unknown
("hashtags", <__NSArrayI 0x170c22200>(
test,
test2
)
)
并且因为我将 unknown
传递到那里,所以其余代码没有执行。我在这里错过了什么?
您的 JSON 似乎是一个字典,它的唯一键包含一个字符串数组。
您正在尝试循环遍历字典,就好像它是一个数组一样。那是错误的。
尝试像这样使用两步可选绑定:
if let jsonData = response.result.value as? [String: AnyObject],
hashtags = jsonData["hashtags"] as? [String] {
for hashtag in hashtags {
//your code here
}
}
如果您知道 Json 数据的结构将是一个以字符串数组作为其值的字典 ([String: [String]]
),您应该这样转换它,而不是将其转换为 [String: AnyObject]
.
然后,您可以遍历字典中包含的数组并期望得到字符串值。
if let jsonData = response.result.value as? [String: [String]] {
for hashtag in jsonData["hashtags"] {
print(hashtag)
// and so on
}
}
我正在尝试使用从 Alamofire 获取的数据更新 UITableView
。
我的后端webservice returns数据如下:
{"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:
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 { [=14=].stringValue}
return SingleHashtag(hashtagText: hashtagText)
}
}
我无法让它工作。问题是这两行:
print(JSON(hashtag))
print(hashtag)
打印:
unknown
("hashtags", <__NSArrayI 0x170c22200>(
test,
test2
)
)
并且因为我将 unknown
传递到那里,所以其余代码没有执行。我在这里错过了什么?
您的 JSON 似乎是一个字典,它的唯一键包含一个字符串数组。
您正在尝试循环遍历字典,就好像它是一个数组一样。那是错误的。
尝试像这样使用两步可选绑定:
if let jsonData = response.result.value as? [String: AnyObject],
hashtags = jsonData["hashtags"] as? [String] {
for hashtag in hashtags {
//your code here
}
}
如果您知道 Json 数据的结构将是一个以字符串数组作为其值的字典 ([String: [String]]
),您应该这样转换它,而不是将其转换为 [String: AnyObject]
.
然后,您可以遍历字典中包含的数组并期望得到字符串值。
if let jsonData = response.result.value as? [String: [String]] {
for hashtag in jsonData["hashtags"] {
print(hashtag)
// and so on
}
}