2016-10-30 193 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成功的。是不是? –