如何使用 swiftyjson 获取 JSON 的值

how to get values of JSON using swiftyjson

我有这个JSON

{
  "chatUsers":"[
    {"id":"5","sender_id":"6","receiver_id":"1","content":"hi","datetime":"2016-11-19 00:00:00"},
    {"id":"4","sender_id":"1","receiver_id":"2","content":"hello","datetime":"2016-11-11 00:00:00"},
    {"id":"2","sender_id":"1","receiver_id":"3","content":"how are you","datetime":"2016-11-04 00:00:00"}
  ]",
  "chatsCount":3
}

现在我有了从 url 获取数据的代码:

let StringUrl  = NSURL(string: url) as NSURL!
let Data = NSData(contentsOfURL: StringUrl) as NSData!
let ReadableData = JSON(data: Data)

let result =  ReadableData["chatUsers"][0]["id"].string! as String // this should gives 5

但它总是报错:

fatal error: unexpectedly found nil while unwrapping an Optional value

知道为什么吗?

你上面提供的例子有很多错误,但为了让你朝着正确的方向前进,让我给你一些建议和快速解决你的问题。

首先,不要以大写字符开头变量。它不是一成不变的规则或任何东西,但最好使用驼峰式命名法,因为它会使您的代码更具可读性并避免混淆。

其次,您正在对可选值进行大量强制转换和强制展开,这将使您的应用程序容易因与您现在遇到的相同错误而崩溃。我会看看以下内容以获得更好的指导:

第三,在 SO 上发帖时,请确保清楚地给出问题的背景,因为某些用户可能认为您在问 optionals 是什么以及为什么会得到 fatal error: unexpectedly found nil while unwrapping an Optional value错误。

话虽如此,以后请确保查看 SwiftyJSON 文档,因为它们非常清楚地演示了如何使用该库。您的代码无法正常工作的原因是您对 JSON 的处理不正确。这是一个更新的示例:

    let StringUrl  = NSURL(string: url) as NSURL!
    let Data = NSData(contentsOfURL: StringUrl) as NSData!
    let ReadableData = JSON(data: Data)
    let chatUsers = ReadableData["chatUsers"].arrayValue
    let result =  chatUsers[0]["id"].stringValue

或者如果您需要遍历所有用户:

    let StringUrl  = NSURL(string: url) as NSURL!
    let Data = NSData(contentsOfURL: StringUrl) as NSData!
    let ReadableData = JSON(data: Data)

    for chatUser in ReadableData["chatUsers"]{
        print(chatUser.1["id"].stringValue)
    }

请注意,为了不让您感到困惑,我没有将您的变量标识符更新为正确的约定,但您应该真正遵循我在第一点中提到的正确约定。

祝你好运。

编辑:忘记提及您的 JSON 格式不正确。请将您的 JSON 数据修正为正确的 JSON 格式,以便 SwiftyJSON 可以正确解释它。您收到的索引超出范围,因为 SwiftyJSON 不知道 chatUsers 是一个数组,因为方括号在不应该的情况下用双引号引起来。所以

"chatUsers":"[
{"id":"5","sender_id":"6","receiver_id":"1","content":"hi","datetime":"2016-11-19 00:00:00"},
{"id":"4","sender_id":"1","receiver_id":"2","content":"hello","datetime":"2016-11-11 00:00:00"},
{"id":"2","sender_id":"1","receiver_id":"3","content":"how are you","datetime":"2016-11-04 00:00:00"}
]" 

应该是

"chatUsers": [
{"id":"5","sender_id":"6","receiver_id":"1","content":"hi","datetime":"2016-11-19 00:00:00"},
{"id":"4","sender_id":"1","receiver_id":"2","content":"hello","datetime":"2016-11-11 00:00:00"},
{"id":"2","sender_id":"1","receiver_id":"3","content":"how are you","datetime":"2016-11-04 00:00:00"}
]