iOS 编程,获取 JSON 数据
Posted
技术标签:
【中文标题】iOS 编程,获取 JSON 数据【英文标题】:iOS programming, fetching JSON data 【发布时间】:2016-04-21 23:14:39 【问题描述】:我已将 SwiftyJSON.swift 文件添加到我的项目中,并且我正在尝试从网络上获取一些数据。现在我的项目运行,但只运行到我试图从字典中的 json 获取数组的那一行。我不明白问题出在哪里,但我猜它一定是非常愚蠢的,因为我刚刚开始学习 swift。
我只是想在控制台中打印来自该 url 的所有电影的名称,在我设法达到这个性能之后,我将尝试获取电影的摘要,然后将它们放在 TableView 中。
import UIKit
class FirstViewController: UIViewController
override func viewDidLoad()
super.viewDidLoad()
//grab the status code and check if the transfer was successful == 200
let requestURL: NSURL = NSURL(string: "https://itunes.apple.com/us/rss/topmovies/limit=50/json")!
let urlRequest: NSMutableURLRequest = NSMutableURLRequest(URL: requestURL)
let session = NSURLSession.sharedSession()
let task = session.dataTaskWithRequest(urlRequest)
(data, response, error) -> Void in
let httpResponse = response as! NSHTTPURLResponse
let statusCode = httpResponse.statusCode
if (statusCode == 200)
//sort through the stations key and cast the data into an array of dictionaries
do
let json = try NSJSONSerialization.JSONObjectWithData(data!, options:.AllowFragments)
print("bbbbb")
// From here on, it doesn't print anything anymore
if let movies = json["entry"] as? [[String: AnyObject]]
print(movies)
print("test")
for movie in movies
if let name = movie["name"] as? String
print("mmmm")
print("%@ (Built %@)",name)
catch
print("Error with Json: \(error)")
task.resume()
【问题讨论】:
在你尝试获取movies
之前,尝试通过“print("json contents is \(json)")
”打印出json
字典的内容。我很想知道是否真的有@987654326 @? 我猜有,但它可能嵌套在其他东西中。
通过查看这个,我会在黑暗中刺伤并说 json 没有名为 entry 的键。如果你想强制错误改变你的 as?作为!它可能会让你知道发生了什么。
@MichaelDautermann 我刚刚在我尝试获取电影的行之前添加了您的打印行,但它仍然没有打印任何内容,我在控制台中唯一拥有的是来自以前的印刷品。
@Jthomps 我也尝试过从 ?到 !我得到了这个:条件绑定的初始化程序必须具有可选类型,而不是 [[String: AnyObject]]
这是 json 数据:itunes.apple.com/us/rss/topmovies/limit=50/json
【参考方案1】:
entry
是一个json数组,使用.array
if let movies = json["entry"].array
for movie in movies
// Do stuff
也是一般提示。不要转换值,例如
movie["something"] as? String
宁可使用内置功能:
movie["something"].string
更新
仔细查看您的代码,我发现您实际上根本没有使用SwiftyJSON.swift
。
要使用 Swifty,您可以像这样解析 json 文本并获得一个 JSON 对象:
let jsonObj = JSON(data: yourData) // data is a NSData
请再看一下文档:
https://github.com/SwiftyJSON/SwiftyJSON
我认为您正在阅读“为什么 Swift 中的典型 JSON 处理不好?”部分。该部分解释了在 Swift 中管理 json 的原生和“糟糕”方式,真正的文档在下面。
【讨论】:
仍然无法正常工作,它只会在控制台中打印 bbbbb,之后仅此而已 >:(以上是关于iOS 编程,获取 JSON 数据的主要内容,如果未能解决你的问题,请参考以下文章