我有要在Swift3中使用的json数据。我正在学习Swift,并正在构建一个非常基本的应用程序,该应用程序显示来自JSON的tableUIView中的项目列表。
{
"expertPainPanels" : [
{
"name": "User A",
"organization": "Company A"
},
{
"name": "User B",
"organization": "Company B"
}
]
}
我正在尝试使用Swift 3获取此数据。
if (statusCode == 200) {
do{
let json = try? JSONSerialization.jsonObject(with: data!, options:.allowFragments) // [[String:AnyObject]]
/*
If I do this:
let json = try? JSONSerialization.jsonObject(with: data!, options:.allowFragments) as! [String:Any]
if let experts = json?["expertPainPanels"] as! [String: Any] {
I get "Initializer for conditional binding must have Optional type, not '[String: Any]'"
*/
// Type 'Any' has no subscript members.
if let experts = json["expertPainPanels"] as? [String: AnyObject] {
for expert in experts {
let name = expert["name"] as? String
let organization = expert["organization"] as? String
let expertPainPanel = ExpertPainPanel(name: name, organization: organization)!
self.expertPainPanels += [expertPainPanel]
self.tableView.reloadData()
self.removeLoadingScreen()
}
}
}catch {
print("Error with Json: \(error)")
}
}
在Swift 2中运行正常。我更新到Swift 3,这破坏了代码。我读了几篇SO,但是我仍然很难理解它。我应用了一些建议,包括Swift 3中的JSON
Parsing,但是我仍然无法解决出现的错误。
从Swift 3开始,您需要尽早进行投射。
这行:
let json = try? JSONSerialization.jsonObject(with: data!, options:.allowFragments)
应该变成这个:
let json = try JSONSerialization.jsonObject(with: data!, options:.allowFragments) as? [String : AnyObject]
这是因为JSONSerialization现在返回Any
,它没有为[]
运算符实现变体。确保安全地打开演员表,并采取常见措施以确保程序不会崩溃。
编辑:您的代码应该或多或少看起来像这样。
let data = Data()
let json = try JSONSerialization.jsonObject(with: data, options:.allowFragments) as! [String : AnyObject]
if let experts = json["expertPainPanels"] as? [String: AnyObject] {
我试图获取一个JSON响应,并将结果存储在一个变量中。我在以前的Swift版本中使用过这个代码版本,直到Xcode8的GM版本发布。我在StackOverflow上看了几篇类似的文章:Swift 2 Parsing JSON-Cant下标类型为“anyObject”的值和Swift 3中的JSON Parsing。 然而,这里所传达的思想似乎不适用于这种情况。 如何正确解析Swift3中的JSON
问题内容: 我正在尝试找到一种用C解析JSON的好方法。我真的不需要庞大的库或任何东西,我宁愿拥有体积小,重量轻,功能最少的东西,但有很好的文档。 有人有什么可以指点我的吗? 问题答案: Json并不是一门强大的语言,因此它的库可能很小(至少比Xml库要小)。 有一个整体吨C中的Json.org库链接。也许其中之一会很适合您。
问题内容: 我正在尝试解析来自服务器的输出,如下所示: 我正在尝试使用Java org.json对其进行解析,但是我对JSON / org.json没有任何经验,因此遇到了一些麻烦。我该如何解析? 问题答案: 1)假设您的路径上有JSON库(来自www.json.org),这很简单。 从那里,您可以处理JSON对象的各个部分。看一下Javadocs的细节。 https://developer.an
问题内容: 仅供参考:我是Swift的新手,所以这可能是一个非常简单的问题,但我 无法弄清楚。 我一直在关注 使用Xcode 8 beta和Swift 3 的《开始开发iOS应用程序 (Swift) 教程》。 我将Tap Gesture Recognizer附加到了Image View,然后 在ViewController.swift中添加了此操作: 在图像 视图上轻按以调用selectImage
我正在使用来解析Json数据。我的Json数据如下: GsonParse.java 我使用以下方法来解析此JSON数据。 我面对以下错误。
我正在使用凌空OkHttp从服务器获取一些数据。 响应是一个包含JSON的字符串,我想使用GSON/POJO解析它。 我得到错误: 预期BEGIN_OBJECT,但在第1行第1列路径$上是STRING 尝试解析时。 原因:java.lang.IllegalStateException:预期BEGIN_OBJECT但在第1行第1列路径$ com.google.gson.stream.JsonRead