(Swift3) 可以 return 完整的 JSON 文件,但我不能 return 一个特定的值,我做错了什么?

(Swift3) Can return the full JSON file but I cannot return a specific value, what am I doing incorrectly?

我有一个这样命名的本地 JSON 文件:testTheJSON.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) return 完整 JSON 文件和 print(name) return 为空?我是否错误地执行了 var name = readableJSON["myJSON","ID1","name"] 行?谢谢!

编辑:我正在使用 SwiftyJSON 框架 - 这是 JSON 方法的来源。我正在学习本教程:https://www.youtube.com/watch?v=_NfijT6mt6A

正确地阅读你的testTheJSON.json文件的内容并要求SwiftyJSON解析它。 (您的代码对 NSData class 的使用相当糟糕,但这实际上并没有导致任何错误。)

问题是您的 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"]