使用Swift从JSON中提取数组

使用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

Java经验丰富,但与Swift的n00b相对较低。我有下面的JSON,我无法从中提取“images”数组,它可能有多达3个图像

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

工作得很好。谢谢,埃里克。工作做得很好。谢谢,埃里克。