解析后JSON结果为零
Posted
技术标签:
【中文标题】解析后JSON结果为零【英文标题】:JSON result nil after parsing 【发布时间】:2017-02-09 02:26:54 【问题描述】:我正在尝试从 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;
到目前为止一切都很好,我的解析工作正常,我现在有来自服务器的数据。
但是 print(mySuccess!) 给出了这个输出
致命错误:在展开可选值时意外发现 nil
所以我理解输出说代码在展开时发现 nil,所以我现在的问题是如何提取 "Success" 键的值,因为它在 Swift 2 下的行为但现在在 Swift 3 下不是这样吗?
更新
Sneak 发现了一个可能的问题,即成功 = 1 没有“”,因此我会在调查后更新问题答案。
【问题讨论】:
JSON Parsing in Swift 3的可能重复 【参考方案1】:您好,您可以使用 OPTIONAL BINDING 的概念来检查 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")
【讨论】:
【参考方案2】:好的,所以 cmets 真的很有帮助,帮助我解决了这个问题。我开始查看丢失的“”,但注意到当我输入以下代码时:
for (key, value) in jsonResult!
print (key)
print (value)
我得到以下输出
logged_in
1
full_login
0
success
1
message
<null>
所以必须有一种方法来获得成功的价值。This page 最后给了我解决方案。 我不得不使用以下代码:
let myResult = (jsonResult?["success"])
print("SUCCESS VALUE >> ", myResult!)
这现在给了我 1 的值,一切都解决了。 再次感谢 cmets 的帮助。
然后我遇到了没有意识到成功值是 Bool 的问题,所以我不得不使用以下代码来检查真假:
if (jsonResult?["success"] as? Bool)!
okToLogIn = true
print(okToLogIn)
else
okToLogIn = false
print(okToLogIn)
现在一切正常,应用在 Swift 3 下再次运行。
【讨论】:
【参考方案3】:您的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 响应。
【讨论】:
我认为这不是问题,因为如果是这种情况,他应该在 Swift 2 中崩溃(?)不确定你是否也可能是正确的。 谢谢,试过了,但没有帮助。尽管如此,作为成功的致命错误仍然为零。输出没有“”,所以我认为它是正确的键值格式。 是的并且仍在阅读它,但到目前为止并没有孤立我的问题,但我仍在阅读它。 在阅读了您重复的帖子线程后,我刚刚得出了相同的结论,即答案缺少“”。我将与服务器小伙交谈并更新我的答案。感谢您查看可能的问题。 @Sneak 打印命令类似于 NSLog 命令,它会从字典中的纯字母数字键或值中去除引号。以上是关于解析后JSON结果为零的主要内容,如果未能解决你的问题,请参考以下文章