使用Swift从JSON中提取数组
Java经验丰富,但与Swift的n00b相对较低。我有下面的JSON,我无法从中提取“images”数组,它可能有多达3个图像使用Swift从JSON中提取数组,json,swift,Json,Swift,Java经验丰富,但与Swift的n00b相对较低。我有下面的JSON,我无法从中提取“images”数组,它可能有多达3个图像 { "status" : "OPEN", "description" : “…”, "name" : “…”, "owner" : 1, "images" : [ { "id" : 1, "path" : "\/uploads\/1-6000345
{
"status" : "OPEN",
"description" : “…”,
"name" : “…”,
"owner" : 1,
"images" : [
{
"id" : 1,
"path" : "\/uploads\/1-60003456.jpeg"
}
],
"created" : 1459135829000,
"id" : 1
}
我不断遇到大量编译时和运行时错误。例如,来自SwiftyJSON文档的以下代码:
for (key,subJson):(String, JSON) in json {
if(key == "images"){
let myImages = subJson.array
print(myImages![0]["path"])
}
}
正确打印“路径”的值,但仍试图将该值保存在我的[String]图像中:
images.append(myImages![0]["path"] as String)
给出错误“无法用字符串类型的索引为JSON类型的值下标”
XCode告诉我Subjectson是一个用于“图像”的NSDictionary(或者它是一个字典数组?),但是,当我尝试将其转换为这样的类型时,我得到“无法将JSON类型的值转换为协同转换中的NSDictionary类型”
我确信这是一个简单的语法错误,但在这一点上,我只是在各种错误之间来回走动。感谢您的指导。不要使用向下广播,SwiftyJSON已经完成了这项工作。SwiftyJSON有一个可选的getter,用于它已解析的对象的字符串表示:
myImages![0]["path"].string
因为它是可选的,所以您希望安全地展开它:
if let path = myImages![0]["path"].string {
images.append(path)
}
如果myImages![0][“path”]
不是字符串,那么SwiftyJSON为您提供了与JSON类型一样多的可选getter:
myImages![0]["path"].array
myImages![0]["path"].dictionary
myImages![0]["path"].int
等等
使用SwiftyJSON,您还可以直接下标:
if let firstImagePath = json["images"][0]["path"].string {
// use "firstImagePath"
}
总之,另一种循环是:
if let images = json["images"] {
for image in images {
if let path = image["path"].string {
// use "path"
}
}
}
不要使用向下投射,SwiftyJSON已经完成了这项工作。SwiftyJSON有一个可选的getter,用于它已解析的对象的字符串表示:
myImages![0]["path"].string
因为它是可选的,所以您希望安全地展开它:
if let path = myImages![0]["path"].string {
images.append(path)
}
如果myImages![0][“path”]
不是字符串,那么SwiftyJSON为您提供了与JSON类型一样多的可选getter:
myImages![0]["path"].array
myImages![0]["path"].dictionary
myImages![0]["path"].int
等等
使用SwiftyJSON,您还可以直接下标:
if let firstImagePath = json["images"][0]["path"].string {
// use "firstImagePath"
}
总之,另一种循环是:
if let images = json["images"] {
for image in images {
if let path = image["path"].string {
// use "path"
}
}
}
工作得很好。谢谢,埃里克。工作做得很好。谢谢,埃里克。