2016-11-01 41 views
-1

获得JSON的价值观我有这样的JSON如何使用swiftyjson

{ 
    "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

有什么想法为什么?

+2

设置断点,调试一步一步来。发现哪一个是零 – antonio081014

+0

json格式错误,为什么向每个键和值添加反斜杠,不需要添加这个 –

+1

[什么是“致命错误:意外发现零,而解包可选值”是什么意思? ](HTTP://计算器。com/questions/32170456/what-does-fatal-error-unexpectedly-found-nil-while-unwrapping-an-optional-valu) – rmaddy

回答

1

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

首先,不要用大写字符开始变量。它不是一套规则或任何东西,但最好使用camelCase,因为它会使代码更具可读性并避免混淆。

其次,你正在做大量的强制转换和强制解包可选值,这将使你的应用程序容易因为你现在得到的同样的错误而崩溃。我想看看下面的一些更好的指导:https://stackoverflow.com/a/25195633/4660602

第三,因此发布会上时,请确保您清楚地给你的问题情境一些用户可能会认为你是问一个关于什么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"} 
] 
+0

嗨,感谢您的回答,我跟着你的代码,但它给了我:致命错误:索引超出范围。 –

+0

看看答案更新 –

+0

啊哈现在,这是我一直在寻找的问题:D,非常感谢你的答案和你提供的提示,他们真的有帮助 –

相关问题