首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Swift中循环遍历JSON数组

在Swift中循环遍历JSON数组
EN

Stack Overflow用户
提问于 2017-12-14 12:45:58
回答 1查看 3.2K关注 0票数 0

我试图循环从HTTP请求中获得的JSON数组,但我不确定如何循环。

我试过的是:

代码语言:javascript
运行
复制
var request = NSMutableURLRequest(url: url! as URL, cachePolicy: NSURLRequest.CachePolicy.returnCacheDataElseLoad, timeoutInterval: Double.infinity)
if Reachability.isConnectedToNetwork(){
    request = NSMutableURLRequest(url: url! as URL, cachePolicy: NSURLRequest.CachePolicy.useProtocolCachePolicy, timeoutInterval: Double.infinity);
}
let session = URLSession.shared
var getResp = false

var zinnen : [Zin] = []
let task = session.dataTask(with: request as URLRequest,
                            completionHandler: { data, response, error -> Void in
                                let json = try? JSONSerialization.jsonObject(with: data!, options: []) as? [String: Any]
                                for case let data in json {
                                    if let zin = Zin(json: data) {
                                        zinnen.append(zin)
                                    }
                                }
})
task.resume()

这是我的结构:

代码语言:javascript
运行
复制
struct Zin : CustomStringConvertible {
    var description: String

    let id : Int
    let dutch_sentence : String
    let polish_sentence : String
    init(dictionary: [String: Any]) {
        self.id = dictionary["id"] as? Int ?? 0
        self.dutch_sentence = dictionary["dutch_sentence"] as? String ?? ""
        self.polish_sentence = dictionary["polish_sentence"] as? String ?? ""
    }
}

JSON数组的示例:

代码语言:javascript
运行
复制
[  
   {  
      "id":"35",
      "dutch_sentence":"Ja",
      "polish_sentence":"Tak"
   },
   {  
      "id":"36",
      "dutch_sentence":"Nee",
      "polish_sentence":"Nie"
   }
]

但在这件事上我得到了错误

“字符串:有吗?”不符合协议“顺序”

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-14 14:03:11

不要忽视错误!try?和可选的下播都会导致嵌套的可选(Optional<Optional<[String:Any]>>),这当然不是序列,即使在被抛入数组时也不是。

处理错误,可选地绑定结果,并将结果强制转换到更指定的数组 [[String:String]]。根据JSON,id的值是String,而不是Int

代码语言:javascript
运行
复制
do {
   if let json = try JSONSerialization.jsonObject(with: data!) as? [[String: String]] {
      for zinData in json {
          let zin = Zin(dictionary: zinData)
          zinnen.append(zin)
      }
   }
} catch { print(error) }

PS:Zin类中的初始化程序与解析代码中的初始化器不匹配。我在用这门课的版本。您必须将id类型从Int更改为String

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47813737

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档