(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

【问题讨论】:

什么是JSONios 中没有这样的类。 在上面添加了一个编辑,这是来自 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 文件,但我无法返回特定值,我做错了啥?的主要内容,如果未能解决你的问题,请参考以下文章

Swift3 不写入文件

Swift3 和 JSON

Json 解析 Swift 3 Alamofire

Swift 3 循环 JSON 数据

swift 3 json序列化

servletoutputstream写数据返回不完整