36

我有一个可以用 SwiftyJSON 解析的 json:

if let title = json["items"][2]["title"].string {
     println("title : \(title)")
}

完美运行。

但我无法循环通过它。我尝试了两种方法,第一种是

// TUTO :
//If json is .Dictionary
for (key: String, subJson: JSON) in json {
    ...
}
// WHAT I DID :
for (key: "title", subJson: json["items"]) in json {
    ...
}

XCode 不接受 for 循环声明。

第二种方法:

// TUTO :
if let appArray = json["feed"]["entry"].arrayValue {
     ...
}
// WHAT I DID :
if let tab = json["items"].arrayValue {
     ...
}

XCode 不接受 if 语句。

我究竟做错了什么 ?

4

5 回答 5

79

如果要遍历json["items"]数组,请尝试:

for (key, subJson) in json["items"] {
    if let title = subJson["title"].string {
        println(title)
    }
}

至于第二种方法,.arrayValue返回 Optional数组,你应该.array改用:

if let items = json["items"].array {
    for item in items {
        if let title = item["title"].string {
            println(title)
        }
    }
}
于 2015-02-06T15:28:17.993 回答
11

我觉得有点奇怪解释自己,因为实际使用:

for (key: String, subJson: JSON) in json {
   //Do something you want
}

给出语法错误(至少在 Swift 2.0 中)

正确的是:

for (key, subJson) in json {
//Do something you want
}

其中确实 key 是一个字符串,而 subJson 是一个 JSON 对象。

但是我喜欢做一些不同的事情,这里有一个例子:

//jsonResult from API request,JSON result from Alamofire
   if let jsonArray = jsonResult?.array
    {
        //it is an array, each array contains a dictionary
        for item in jsonArray
        {
            if let jsonDict = item.dictionary //jsonDict : [String : JSON]?
            {
                //loop through all objects in this jsonDictionary
                let postId = jsonDict!["postId"]!.intValue
                let text = jsonDict!["text"]!.stringValue
                //...etc. ...create post object..etc.
                if(post != nil)
                {
                    posts.append(post!)
                }
            }
        }
   }
于 2015-07-09T21:05:36.147 回答
8

在 for 循环中,的类型key不能是 type "title"。因为"title"是一个字符串,所以去 : key:String。然后在循环内部,您可以"title"在需要时专门使用它。而且类型subJson必须是JSON

并且由于 JSON 文件可以被视为 2D 数组,因此json["items'].arrayValue将返回多个对象。强烈建议使用 : if let title = json["items"][2].arrayValue

看看:https ://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Types.html

于 2015-02-06T12:48:36.620 回答
2

请检查自述文件

//If json is .Dictionary
for (key: String, subJson: JSON) in json {
   //Do something you want
}

//If json is .Array
//The `index` is 0..<json.count's string value
for (index: String, subJson: JSON) in json {
    //Do something you want
}
于 2015-05-01T14:03:28.153 回答
0

您可以通过以下方式遍历 json:

for (_,subJson):(String, JSON) in json {

   var title = subJson["items"]["2"]["title"].stringValue

   print(title)

}

查看 SwiftyJSON 的文档。 https://github.com/SwiftyJSON/SwiftyJSON 浏览文档的循环部分

于 2019-01-21T01:52:34.820 回答