2017-07-26 88 views
2

我有一個JSON解析問題,我的Swift代碼如下。我得到的錯誤說我的JSON輸出不包含密鑰valueJSON輸出不包含密鑰:「值」

我的代碼:

Alamofire.request(url, method: .get, headers: headers).responseJSON { (response) -> Void in 

    let jsonValue = response.result.value as! NSDictionary 
    if let bpArray = jsonValue["value"] as? [NSDictionary]{ 
     for results in bpArray {...} 

問題: 這種轉換並不工作:if let bpArray = jsonValue["value"] as? [NSDictionary]

我的JSON結構:

{ 
    d: { 
     results: [ 
      { 
       __metadata: {}, 
       Key: "AFBWhULFHtKU4j4FhWCmKg==", 
       ParentKey: "AAAAAAAAAAAAAAAAAAAAAA==", 
       RootKey: "AFBWhULFHtKU4j4FhWCmKg==", 
       Partner: "MM-CARR-01", 
       Type: "2", 
       Description: "MM Demo Carrier Created for Single Stop/MA", 
       FrieghtOrder: {} 
      }, 
     ... 
+0

究竟是怎麼回事?錯誤,'nil'值等。 – ZGski

+0

JSON輸出不包含鍵'值' – vadian

+0

看着你的'JSON'對象,它看起來像它,實際上並沒有任何名爲「value」的屬性。 – ZGski

回答

1

假設您灣噸至訪問結果鍵,以便嘗試這樣的: -

if let bpArray = jsonValue["results"] as? [String: AnyObject]{ 
//yourcode 
} 
+0

謝謝,這個想法做到了神奇。是的,像大多數人所說的「價值」不存在,我沒有直接使用結果,我必須從d->結果導航,如下所示: if let bpData = jsonValue [「d」] as? [String:AnyObject] { for bpData { let arrayInterim = results.value as? NSArray 我在0 .. Selvakumar

+0

如果您認爲它有幫助,那麼請接受答案 –

+0

完成,謝謝你的一個有用的建議。 – Selvakumar

1

嗯,你的JSON結構還沒有得到命名爲價值的關鍵,這就是爲什麼它給了一個錯誤。
爲了得到結果陣列,您首先需要獲取該對象在它們被嵌套,並針對你的情況例如'g'

if let data = jsonValue["d"] as? [NSDictionary]{ 
    if let resultsArray = data["results"] as? NSArray { 
     //your code 
    } 
} 
0

請使用SWIFTY Json的POD和試試這個代碼

pod 'SwiftyJSON' 

在你的文件你在哪裏得到響應

import SwiftyJSON 

然後後使用此代碼

  switch response.result { 
      case .success(let JSON2): 
      print("Success with JSON: \(JSON2)") 
       // print("Request failed with error: \(response.response?.statusCode)") 

       if let response = JSON2 as? NSMutableDictionary 
       { 

       } 
       else if let response = JSON2 as? NSDictionary 
       { 
if let data = response?.object(forKey: "d") as? NSDictionary 
{ 
    if let resultsArray = data?.object(forKey: "results") as? NSArray 
     { 

     } 
} 
       } 
       else if JSON2 is NSArray 
       { 

        let swjson = JSON(response.result.value!) 
        print(swjson) 
        // callback(swjson,nil) 
        var myMutableDictionary = [AnyHashable: Any]() 
        myMutableDictionary["myArray"] = swjson 

        callback(myMutableDictionary as NSDictionary?,nil) 
        print("accc") 
       } 
       else if ((JSON2 as? String) != nil) 
       { 

        let userDic : [String : String] = ["quatid":JSON2 as! String] 
        print(userDic) 


      } 

       break 

      case .failure(let error): 
       print("Request failed with error: \(error)") 

      } 
0

記住它的更好,我們不會使用NSArray & NSDictionary喜歡的東西在SWIFTSWIFT它的自我提供letvar關鍵字的各種數據類型。 首先,您可以創建可以保存數據的模型。

MyModel.swift

class MyModel: NSObject { 
    var ParentKey : Int? 

    init(jsonObject:[String:Any]) { 
     ParentKey = jsonObject["ParentKey"] as? String ?? "" 
    } 
} 

Viewcontroller.Swift

var myModel : [MyModel] = [] 
    if let responseData = response["d"] as? [String:Any]{ 
       if let dataObject = responseData["results"] as? [[String:Any]]{ 
       self.myModel = dataObject.map({return MyModel(jsonObject: $0)})//for assigning data into model 
       } 
     } 
0

正如許多人說,我是錯的 「價值」。侯賽因的答案使用[String:AnyObject]幫助。

我不確定下面是否整齊實現,但它做到了神奇。應用程序按預期加載。代碼如下專家:

解決方案:

 if let bpData = jsonValue["d"] as? [String: AnyObject]{ 

      for results in bpData { 

       let arrayInterim = results.value as? NSArray 

       for i in 0 ..< arrayInterim!.count {