(Swift3)可以返回完整的 JSON 文件,但我无法返回特定值,我做错了啥?
Posted
技术标签:
【中文标题】(Swift3)可以返回完整的 JSON 文件,但我无法返回特定值,我做错了啥?【英文标题】:(Swift3) Can return the full JSON file but I cannot return a specific value, what am I doing incorrectly?(Swift3)可以返回完整的 JSON 文件,但我无法返回特定值,我做错了什么? 【发布时间】:2016-11-05 23:28:58 【问题描述】:我有一个名为 testTheJSON.json 的本地 JSON 文件
"myJSON":
[
"ID1" :
"name":"Stack",
"LastName": "Overflow"
,
"ID2" :
"name":"Cat",
"last":"dog",
]
我尝试这样读取文件:
func parseJSON()
let path = Bundle.main.path(forResource: "testTheJSON", ofType: "json")
let jsonData : NSData = NSData(contentsOfFile: path!)! as NSData!
let readableJSON = JSON(data: jsonData as Data, options: JSONSerialization.ReadingOptions.mutableContainers, error: nil)
var name = readableJSON["myJSON","ID1","name"]
print(readableJSON) //returns the full JSON script
print (name) //returns null
为什么print(readableJSON)
返回完整的 JSON 文件而 print(name)
返回为 null?我做错了var name = readableJSON["myJSON","ID1","name"]
行吗?谢谢!
编辑:我正在使用 SwiftyJSON 框架 - 这是 JSON 方法的来源。我正在关注本教程:https://www.youtube.com/watch?v=_NfijT6mt6A
【问题讨论】:
什么是JSON
? ios 中没有这样的类。
在上面添加了一个编辑,这是来自 SwiftyJSON 框架。
您应该从该代码中完全删除对 NSData 的使用。您要使用的 Swift 3 类型始终是 Data。
感谢大家的回复。如果您投了反对票,请说明原因,以便我将您的反馈纳入我未来的问题中。
【参考方案1】:
您正确读取了 testTheJSON.json 文件的内容并要求 SwiftyJSON 解析它。 (您的代码对 NSData 类的使用相当差,但这实际上并没有导致任何问题。)
问题在于您的 testTheJSON.json 文件是无效的 JSON。 因此解析失败并返回 nil
— 这实际上是正确的行为。因此,没有什么是错的。我们希望解析器在收到无效数据时失败。
这实际上回答了问题,但作为奖励,我还将为您提供文件的有效版本:
"myJSON":
[
"ID1" :
"name":"Stack",
"LastName": "Overflow"
,
"ID2" :
"name":"Cat",
"last":"dog"
]
你看出区别了吗? (提示:在"dog"
之后。)
之后,您可以修复当前错误的下标表达式。应该是:
let name = readableJSON["myJSON"][0]["ID1"]["name"]
或者你可以写成:
let name = readableJSON["myJSON",0,"ID1","name"]
【讨论】:
谢谢 - 我尝试使用您提供的这个 JSON 文件,但我的问题中出现了相同的行为。有没有更好的方法可以尝试拨打相同的电话? "但我的问题中表现出相同的行为"不,不是!你错了。name
仍为 null,但 readableJSON
现在正确显示已解析的文件。 — 添加了代码来替换您对 name
的无意义推导,因此现在它也不会为空。以上是关于(Swift3)可以返回完整的 JSON 文件,但我无法返回特定值,我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章