如何使用 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"}
]
我有这个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"}
]