[英]JSON result nil after parsing
我正在尝试从JSON序列化中提取值,但结果为nil 。
App在Swift2下运行,因此将其转换为问题开始的Swift 3。
let jsonResult = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
print(jsonResult!)
let mySuccess = jsonResult?["success"] as? Int
print (mySuccess!)
print(jsonResult!)提供以下输出
{
"full_login" = 0;
"logged_in" = 1;
message = "<null>";
success = 1;
}
到目前为止一切顺利,我的解析工作正常,现在我从服务器获取了数据。
但是print(mySuccess!)提供此输出
致命错误:解开Optional值时意外发现nil
所以我理解输出说代码在解包时发现nil,所以我的问题现在是如何提取“成功”键的值,因为它在Swift 2下表现良好,但现在在Swift 3下却表现不佳?
更新
Sneak发现了一个可能的问题,即成功= 1没有“”,因此一旦我进行调查,就会更新问题的答案。
嗨,您可以使用可选绑定的概念来检查nil值。
let jsonResult = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary
print(jsonResult!)
if let mySuccess = jsonResult?["success"] as? Bool
{
print (mySuccess)
}
else
{
print ("Found nil")
}
您的打印success = 1;
日志success = 1;
演示jsonResult?["success"]
不是nil
。 JSONSerialization.jsonObject只能返回显示为1
三件事:字符串,数字或值true
。 当您尝试将其作为Int
展开时,它失败了,唯一剩下的可能是String
或Bool
。
您可能会success
因为:
"success": true
要么:
"success": "1"
因此,您可能需要执行以下操作:
let mySuccess = jsonResult?["success"] as? Bool
要么:
let mySuccess = jsonResult?["success"] as? String
或要求更改后端API响应。
好的,这样的评论真的很有帮助,并帮助我完善了这个问题。 我开始查看缺少的“”,但是注意到当我输入以下代码时:
for (key, value) in jsonResult!
{
print (key)
print (value)
}
我得到以下输出
logged_in
1
full_login
0
success
1
message
<null>
因此,必须有一种方法来获取成功的价值。
本页最后给出了解决方案。 我必须使用以下代码:
let myResult = (jsonResult?["success"])
print("SUCCESS VALUE >> ", myResult!)
现在,这给了我1的值,并且全部求解。 再次感谢您提供的帮助。
然后,我遇到了一个问题,那就是没有意识到成功值是一个布尔值,因此我不得不使用以下代码来检查是非值:
if (jsonResult?["success"] as? Bool)!
{
okToLogIn = true
print(okToLogIn)
}
else
{
okToLogIn = false
print(okToLogIn)
}
现在一切正常,应用程序又可以在Swift 3下正常工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.