2015-09-06 46 views
1
[ 

    { 

    "ID": 0, 

    "Name": "PHI" 

    }, 

    { 

    "ID": 0, 

    "Name": "ATL" 

    } 

] 

我正在使用SwiftyJSON和Alamofire。這是返回的內容。我想在我的代碼中遍歷這些對象中的每一個。儘管如此,我仍然無法獲得這些信息。如何使用SwiftyJSON解析這種類型的JSON?

json [0] [「Name」]。string似乎返回零,我不知道爲什麼。 JSON對象肯定會得到JSON,當我將它打印到控制檯時,它看起來和上面完全一樣。

我也試過:

var name = json[0].dictionary?["Name"] 

還是零,但。

任何想法?

編輯

下面是我使用的檢索JSON的代碼。

Alamofire.request(.GET, "url", parameters: nil, encoding: .JSON, headers: nil).responseJSON 
{ 
    (request, response, data, error) in 
    var json = JSON(data!) 
    //var name = json[0].dictionary?["Name"] 
} 
+0

您是否嘗試過打印'json [0]'? – Aks

+0

是的,json [0]也是零。 – halterdev

+0

如果json [0]爲零,那麼我認爲格式化和/或檢索有問題 – Tamarisk

回答

0

你的JSON是有效的(至少這段代碼是),你的第一個方法從SwiftyJSON中檢索數據是正確的。

另一方面,你展示的Alamofire片段沒有爲我編譯,我不得不改變簽名。

鑑於在評論,你說,不僅json[0]["Name"]是零,但json[0]零,我覺得你有你的數據是如何獲取一個問題。

我在一個示例應用程序測試這個版本的Alamofire方法,效果不錯:

Alamofire.request(.GET, yourURL).responseJSON(options: nil) { (request, response, data, error) in 
    let json = JSON(data!) 
    let name = json[0]["Name"].string 
    println(name) 
} 

enter image description here

在截圖中,URL是我的本地服務器,用你的JSON複製粘貼在「test.json」中。

這個「答案」是我的評論的延伸,我需要空間來顯示更多的信息.​​..

+0

嗯..如果我按照你對我的URL所做的方式格式化我的請求,它不會再返回JSON。數據是零。 – halterdev

+0

好的。那麼我想我們正在使用不同版本的Alamofire。也許在你身邊還有別的東西。 //我認爲現在你應該多調試一下,檢查每一步可能看起來不錯但實際上是錯誤的(經典陷阱)。類似於1-驗證Alamofire *單獨*它返回數據。 2-確認這些數據是你有效的json。 3-你能用NSJSONSerializtion打印結果嗎? 4-你可以用SwiftyJSON來做嗎?等 – Moritz

+0

如果你打印的JSON對象,它看起來像你?我看起來像這樣:[{「ID」:0,「Name」:「Philadelphia」},{「ID」:0,「Name」:「NFL」}] – halterdev

0

我想你可以試試這個。使用swifyJSON

  let json = JSON(data!) 

然後計數在數據中的數組元素

第一轉換JSON(數據)。

   let count: Int? = json.array?.count 

之後,用循環來達到數組元素之一。

for index in 0...count-1 { 

     self.idArray.append(json[index]["ID"].stringValue) 

     self.nameArray.append(json[index]["Name"].stringValue) 
       } 

您將在「idArray」和「nameArray」中獲得排序數據。嘗試打印這兩個數組。

0

您不必使用索引來解析數組。您可以從數組中獲取單個json對象並使用它訪問數據:

for (index: String, subJson: JSON) in json { 
    println("Current Index = \(index)") 

    if let _id = subJson["ID"].int { 
     println("ID = \(_id)") 
    } else { 
     println("Error ID") 
    } 

    if let _name = subJson["Name"].string { 
     println("Name = \(_name)") 
    } else { 
     println("Error Name") 
    } 
}