解析后 JSON 结果为 nil



我正在尝试从 JSON 序列化中提取值,但结果为 nil

应用程序在 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;
}

到目前为止一切都很好,我的解析正在工作,我现在有来自服务器的数据。

但是打印(mySuccess!(给出了这个输出

致命错误:解开可选值时意外发现 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")
}
<</div> div class="one_answers">

好的,所以评论真的很有帮助,帮助我磨练了这个问题。 我开始查看缺少的",但当我输入以下代码时注意到:

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 下再次运行。

您的success = 1;打印日志表明jsonResult?["success"]nil。JSONSerialization.jsonObject 只能返回三个显示为1的东西:字符串、数字或值true。当您尝试将其解开为Int并且失败时,唯一剩下的可能性是它是StringBool

您可能有以下success

"success": true

或:

"success": "1"

因此,您可能需要执行以下操作:

let mySuccess = jsonResult?["success"] as? Bool

或:

let mySuccess = jsonResult?["success"] as? String

或者询问后端 API 响应中的更改。

最新更新