2015-02-06 116 views
24

我有一個JSON是我能與SwiftyJSON解析:如何使用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語句。

我在做什麼錯?

回答

60

如果你想遍歷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) 
     } 
    } 
} 
+0

當我嘗試循環查看[String:JSON]的字典時,出現錯誤:'[String:JSON]?'沒有名爲'Generator'的成員 – mattgabor 2015-08-18 20:26:20

+0

,因爲它是可選的 – nikans 2015-12-05 13:14:59

+0

@rintaro我使用了你的方法,它可以工作,但我不確定我是否有效。如果你有多個'item'來捕獲(例如標題,作者,評論),你是否簡單地重複'if <> = item [「<>」]。string {}' – 2016-01-22 02:10:34

5

在for循環中,key的類型不能是"title"類型。由於"title"是一個字符串,請參閱:key:String。然後在Loop內部,您可以在需要時專門使用"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

+0

請打勾綠色標籤上的左側,如果我的幫助。謝謝! – 2015-02-06 13:45:21

2

請檢查README

//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 
} 
+1

他在問題中說他檢查了文檔。不是非常有用的imo。抱歉。 – 2015-10-19 18:27:26

+0

這對我很有幫助。謝謝 – derickito 2017-08-14 04:07:55

7

我覺得有點怪怪的解釋我自己,因爲實際使用:

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

給出(在雨燕2.0 ATLEAST)語法錯誤

正確的是:

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!) 
       } 
      } 
     } 
    } 
+0

正確的語法是在(鍵,subJson):(字符串,JSON)在JSON – Emptyless 2016-05-23 21:56:55