【问题标题】: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,所以其余的代码没有被执行。我在这里错过了什么?

【问题讨论】:

    标签: ios swift alamofire swifty-json


    【解决方案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
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2021-12-21
      • 1970-01-01
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 2010-11-09
      • 2016-05-22
      • 1970-01-01
      • 2018-05-30
      相关资源
      最近更新 更多