2016-10-30 190 views
1

我試圖解析此JSONJSON解析(SWIFT)

["Items": <__NSSingleObjectArrayI 0x61000001ec20>(

{ 

    AccountBalance = 0; 

    AlphabetType = 3; 

    Description = "\U0631\U06cc\U0648"; 

    FullCode = "P_21_JIM_456_IR_25"; 

    IRNumber = 25; 

    LeftNumber = 21; 

    RightNumber = 456; 

} 

) 

, "ErrorCode": 0, "ErrorMessage": , "Result": 1] 

如何訪問項參數在這種情況下?我試圖創建結構的項目,但我有這個錯誤:無法將類型'(鍵:字符串,值:AnyObject)'的值轉換爲期望的參數類型'[String:AnyObject]' 訪問項目參數的解決方案是什麼?

有我的項目結構和解析JSON代碼:

struct PalletItems { 

     let accountBalance : Int 
     let alphabetType : Int 
     let description : String 
     let fullCode : String 
     let irNumber : Int 
     let leftNumber : Int 
     let rightNumber : Int 

     init? (accountBalance: Int, alphabetType: Int, description : String, fullCode: String, irNumber: Int, leftNumber: Int, rightNumber: Int) { 


      self.accountBalance = accountBalance 
      self.alphabetType = alphabetType 
      self.description = description 
      self.fullCode = fullCode 
      self.irNumber = irNumber 
      self.leftNumber = leftNumber 
      self.rightNumber = rightNumber 

     } 



func palletListFromJSONData(_ data : Data) -> PaletListResult { 



     do{ 
      let jsonresult : [String : AnyObject] 
       = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.allowFragments) as! [String:AnyObject] 
      print("json : \(jsonresult)") 
      let success = jsonresult["Items"] as? PalletItems 
      print("items is : \(success)") 

      for paletJson in jsonresult { 
       if let palet = getBalanceOfWalletFromJsonObject(paletJson) { 

        finalResult.append(palet) 
       } 
      } 


      let palet = getBalanceOfWalletFromJsonObject(jsonresult) 

      finalResult.append(palet!) 

      return .success(finalResult) 

     } 

     catch let error as NSError{ 
      print("that is parsing json error : \(error)") 

      return .failure(error) 
     } 
    } 


    func getBalanceOfWalletFromJsonObject(_ json: [String: AnyObject]) -> ListOfPlates?{ 

     guard let 
      errorCode = json["ErrorCode"] as? Int, 
      let errorMessage = json["ErrorMessage"] as? String, 
      let result = json["Result"] as? Int, 
      let item = json["Items"] as? PalletItems 

      else { 
       return nil 
     } 
     let obj = ListOfPlates(errorCode: errorCode, errorMessage: errorMessage, result: result, items: item) 

     return obj 
    } 
+0

顯示更多代碼。你如何解析? – Shoaib

回答

3

的問題是你要訪問它的鍵值對,但你得到它作爲一個數組。所以json應該是[[String:Any]] 現在這個json應該被解析爲json.first!它給你[字符串:任何]。現在你可以得到任何鍵的價值。

+0

這意味着我沒有創建物品結構?並只是解析JSON可以訪問的項目值? – ava

+0

我想這個,但我有一個錯誤:無法將類型'__NSDictionaryI'(0x1013730b8)的值轉換爲'NSArray'(0x101372c58)。在線讓 =嘗試JSONSerialization.jsonObject(與:數據,選項:JSONSerialization.ReadingOptions.allowFragments)爲! [[String:Any]] – ava

+0

在for循環中,它應該是paletJson成功的。是不是? –