2016-10-30 4 views
1

Ich versuche Parse diese JSONJSON Parsen (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] 

, wie man Artikel Parameter in diesem Fall zugreifen kann? Ich versuche, Struktur für Elemente zu erstellen, aber ich habe einen dieser Fehler: Wert des Typs '(Schlüssel: String, Wert: AnyObject)' kann nicht zum erwarteten Argumenttyp '[String: AnyObject]' konvertiert werden ?

ist meine Artikel Struktur und Parsen von JSON-Code:

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

zeigen Sie mehr Code. Wie versuchst du zu parsen? – Shoaib

Antwort

3

Das Problem ist, Sie versuchen, es als Schlüsselwertpaar zugreifen, aber Sie es als ein Array zu bekommen. Also sollte der JSON von [[String: Any]] sein Jetzt sollte dieser JSON als json.first geparst werden! was dir [String: Beliebige] gibt. Jetzt können Sie den Wert eines beliebigen Schlüssels erhalten.

+0

das heißt ich habe keine Struktur für Artikel erstellen? und nur mit der Analyse von JSON kann auf Artikel Wert zugreifen? – ava

+0

Ich versuche dies, aber ich habe einen Fehler: Konnte Wert des Typs '__NSDictionaryI' (0x1013730b8) nicht in 'NSArray' (0x101372c58) umwandeln. in Zeile = versuche JSONSerialization.jsonObject (mit: data, options: JSONSerialization.ReadingOptions.allowFragments) as! [[String: Any]] – ava

+0

In der for-Schleife sollte paletJson erfolgreich sein. Ist das nicht? –