gpt4 book ai didi

json - Swift - 读取 JSON 文件

转载 作者:搜寻专家 更新时间:2023-10-31 22:16:06 24 4
gpt4 key购买 nike

我是 Swift 的新手 - 尝试从 URL 读取 JSON 文件。我的尝试如下。

JSON 看起来有效 - 我使用 JSONLint 对其进行了测试,但它一直在崩溃。

想法?

func getRemoteJsonFile() -> NSDictionary {
//Create a new url

let remoteUrl:NSURL? = NSURL(string: "http://nfl-api.azurewebsites.net/myplayers.json")

//check if its nil
if let actualRemoteUrl = remoteUrl {

//try to get the data
let filedata:NSData? = NSData(contentsOfURL: actualRemoteUrl)

//check if its nil
if let actualFileData = filedata {

//parse out the dictionaries
let jsonDict = NSJSONSerialization.JSONObjectWithData(actualFileData, options: NSJSONReadingOptions.AllowFragments, error: nil) as NSDictionary

return jsonDict
}
}
return NSDictionary()
}

最佳答案

我花了一秒钟才弄明白,所以我不怪你错过了。

您链接到的 JSON 已缩小,因此很难看到结构。让我们在通过 a prettifier 管道后看一下它的(片段) :

[
{
"PlayerId":2501863,
"PlayerName":"Peyton Manning",
"PlayerTeam":"DEN",
"PlayerPosition":"QB",
"PlayerPassingYards":4727,
"PlayerPassingTDs":39,
"PlayerInterceptions":15,
"PlayerRushingYards":-24,
"PlayerRushingTDs":0,
"PlayerReceivingYards":0,
"PlayerReceivingTDs":0,
"PlayerReturnYards":0,
"PlayerReturnTDs":0,
"PlayerFumbleTDs":0,
"PlayerTwoPointConversions":2,
"PlayerFumblesLost":2,
"PlayerTeamLogo":"http://i.nflcdn.com/static/site/7.0/img/logos/teams-gloss-81x54/den.png"
}
]

嗯。它被括在方括号中,这意味着它是一个数组

它是一个数组,所以您不能将它转换为 NSDictionary。相反,您可以将其转换为 NSArray,但为什么不使用原生 Swift 类型呢?

好吧,如果您不喜欢类型,您很快就会发现,但我仍然认为这是一种更好的方法,因为它会迫使您考虑要解析的数据。

所以我们有了这个函数的类型定义的第一部分;它是一个数组 ([])。我们的阵列由哪些组件组成?我们可以使用一个简单的 NSDictionary,但我们在这里做的是完整的原生类型,所以让我们使用 a native Swift dictionary .

为此,我们必须知道字典的类型(原生字典类型的语法是[KeyType: ValueType])。检查 JSON 显示所有键都是 String,但值的类型不同,因此我们可以使用 AnyObject

这为我们提供了 [String: AnyObject] 的字典类型,而我们的整个 JSON 就是它的一个数组,所以最终类型是 [[String: AnyObject]](哇)。


现在我们有了正确的类型,我们可以稍微修改一下您用来解析 JSON 的函数。

首先,让我们为返回值和转换值使用我们的新类型。然后,让我们将返回类型设置为 optional以防出现问题并添加一个 error 变量来记录它。

清理后的函数看起来像这样:

func getData() -> [[String: AnyObject]]? {
let data: NSData? = NSData(contentsOfURL: NSURL(string: "http://nfl-api.azurewebsites.net/myplayers.json")!)
if let req: NSData = data {
var error: NSError?
if let JSON: [[String: AnyObject]] = NSJSONSerialization.JSONObjectWithData(req, options: NSJSONReadingOptions.AllowFragments, error: &error) as? [[String: AnyObject]] {
return JSON
}
}
return nil
}

就是这样!

我们现在可以像这样调用函数并从我们的 [[String: AnyObject]] 中提取值(再次,哇):

if let data: [[String: AnyObject]] = getData() {
println(data[0]["PlayerName"]!) // Peyton Manning
}

关于json - Swift - 读取 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28802580/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com