Reddit:Swift 3 中的 JSON 解析
Posted
技术标签:
【中文标题】Reddit:Swift 3 中的 JSON 解析【英文标题】:Reddit: JSON Parsing in swift 3 【发布时间】:2017-03-08 03:05:33 【问题描述】:我正在尝试找到一种方法来解析 reddit 上的一些 Json 数据并在表格视图中显示信息。 (https://api.reddit.com)。 到目前为止,这就是我的代码的样子:
var names: [String] = []
var comment: [String] = []
override func viewDidLoad()
super.viewDidLoad()
let url = URL(string: "https://api.reddit.com")
do
let reddit = try Data(contentsOf: url!)
let redditAll = try JSONSerialization.jsonObject(with: reddit, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String : AnyObject]
if let theJSON = redditAll["children"] as? [AnyObject]
for child in 0...theJSON.count-1
let redditObject = theJSON[child] as! [String : AnyObject]
names.append(redditObject["name"] as! String)
print(names)
catch
print(error)
//Table View
func numberOfSections(in tableView: UITableView) -> Int
return 1
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int
return names.count
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath)
//Configure cells...
cell.textLabel?.text = names[indexPath.row]
cell.detailTextLabel?.text = comments[indexPath.row]
return cell
我知道一个事实,信息实际上来自“redditALL”常量,但我不确定在 JSONSerialization 之后我做错了什么。 另外,如果有某种链接可以帮助我更好地理解 JSON 解析,我将不胜感激,谢谢。
【问题讨论】:
你能展示你的json数据结构吗? 【参考方案1】:首先不要使用Data(contentsOf:)
从URL
获取JSON
,因为它会阻塞您的Main
线程,而不是使用URLSession
。
现在要检索您的children
数组,您需要首先访问data
字典,因为children
在其中。所以就这样试试吧。
let url = URL(string: "https://api.reddit.com")
let task = Session.dataTask(with: url!) data, response, error in
if error != nil
print(error.)
else
if let redditAll = (try? JSONSerialization.jsonObject(with: reddit, options: []) as? [String : Any],
let dataDic = redditAll["data"] as? [String:Any],
let children = dataDic["children"] as? [[String:Any]]
for child in children
if let name = child["name"] as? String
names.append(name)
DispatchQueue.main.async
self.tableView.reloadData()
task.resume()
【讨论】:
【参考方案2】:在 Swift (Foundation) 中解析 JSON 非常简单。你打电话给JSONSerialization.jsonObject(with:)
,你会得到一个“对象图”。通常它是包含其他对象的字典或数组。您必须了解所获取数据的格式,以便将结果转换为正确的类型并遍历对象图。如果你投错了,你的代码将无法按预期运行。您应该向我们展示您的 JSON 数据。您的 JASON 和您的代码可能不匹配。
【讨论】:
以上是关于Reddit:Swift 3 中的 JSON 解析的主要内容,如果未能解决你的问题,请参考以下文章