在Swift 3中将JSON对象解析为NSArray

蒙泽

在将项目转换为swift 3之后,当我尝试将JSON对象解析为NSArray时,我遇到了运行时错误,这是我的代码

  let receipt: Data! = try? Data(contentsOf: receiptURL)
    if receipt == nil {//NSData(contentsOfURL: receiptURL, options: nil, error: nil)!
        //            validateReceipt(false)
        return
    }
    let base64Data: String = receipt.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0)) as String

    let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).last?.path//
    do{
        let payload: Dictionary = ["receipt-data" : base64Data as String, "password": sharedSecret as String ]
        let receiptData = try JSONSerialization.data(withJSONObject: payload, options: JSONSerialization.WritingOptions.prettyPrinted)

        let request = NSMutableURLRequest(url: URL(string: serverURL)!, cachePolicy: NSURLRequest.CachePolicy.useProtocolCachePolicy, timeoutInterval: 10) // ur website

        request.httpMethod = "POST"

        request.httpBody = receiptData as! Data?
        var response: URLResponse?
        let resultData = try NSURLConnection.sendSynchronousRequest(request as URLRequest, returning: &response)

        do{
            let json = try JSONSerialization.jsonObject(with: resultData, options: .mutableLeaves) as? NSDictionary
            let statusCode = (json?.object(forKey: "status") as! NSNumber).intValue

            switch(statusCode){
            case 21000, 21002, 21003, 21004, 21006:
                return
            // break
            case 21005:
                //Server is not available: Save recipt data and try again later
                return
            case 21007:
                validateReceipt(true)
                return

            case 21008:
                validateReceipt(false)
                return

            default:
                break
            }
            //print("**********************************")
            //print("json :: ", json )
            //print("**********************************")
            if let parseJSON = json {

                let latest_receipt_info:NSArray = (parseJSON.object(forKey: "receipt") as AnyObject).object(forKey: "in_app") as! NSArray
                //var ms = 0

                //parse the json reponse and add the objects into array
                for i in 0 ..< latest_receipt_info.count {
                    let object:[String: String] = latest_receipt_info.object(at: i) as! [String : String]
                    let strMS = object["expires_date_ms"]
                    let prodId = object["product_id"]
     if(prodId == iAPItems["LifeTime"] || prodId == iAPItems["Remove_Ads"]){
                        latestObjectsForEachProduct[prodId!] = object
                    }else{
                        if let oldTransaction = latestObjectsForEachProduct[prodId!] {
                            let strOldMS = oldTransaction["expires_date_ms"]

                            print("oldTransaction ::  ",prodId, " :: ",strOldMS)
                            if( strMS!.toDouble() > strOldMS!.toDouble() ){
                                //latestObject = object
                                latestObjectsForEachProduct[prodId!] = object
                                //ms = str!.toInt()
                            }
                        }else{
                            latestObjectsForEachProduct[prodId!] = object
                        }

                    }
                }

错误出现在这一行

let latest_receipt_info:NSArray = (parseJSON.object(forKey: "receipt") as AnyObject).object(forKey: "in_app") as! NSArray 

如果有人可以帮助,我不知道该怎么办

请注意,在swift 2上它的工作

罗纳克

试试这个代码

让json =试试JSONSerialization.jsonObject(with:resultData,options:.mutableLeaves)as?NSDictionary让statusCode =(json?.object(forKey:“ status”)as!NSNumber).intValue

替换此代码

let json = try JSONSerialization.jsonObject(with: resultData, options: .mutableLeaves) as? [String:AnyObject]
            let statusCode = (json?["status"] as! NSNumber).intValue

让latest_receipt_info:NSArray =(parseJSON.object(forKey:“ receipt”)as AnyObject).object(forKey:“ in_app”)as!NSArray

替换此代码

let latest_receipt_info:NSArray = parseJSON["receipt"]!["in_app"] as! NSArray

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 Swift 3 中解析 NSArray

来自分类Dev

在Swift中将返回的文本解析为JSON对象?

来自分类Dev

在 Swift 中将 JSON 结果解析为 UILabel

来自分类Dev

尝试将 JSON 解析为 swift3 并显示到 UILabel 中

来自分类Dev

将 Swift 中的 JSON 解析为类数组

来自分类Dev

Swift 3中的JSON解析

来自分类Dev

将json数组解码为swift中的对象

来自分类Dev

将JSON(日期)解析为Swift

来自分类Dev

将JSON解析为Struct Swift 4

来自分类Dev

无法将JSON数据解析为Swift

来自分类Dev

在Swift中解析JSON时为nil

来自分类Dev

如何正确解析 SWIFT 中的 JSON 对象

来自分类Dev

如何在Swift中将JSON数组解析为数组

来自分类Dev

Swift 3.0将NSArray传递为Any

来自分类Dev

Swift 3 JSON解析

来自分类Dev

JSON解析Swift 3

来自分类Dev

在Swift 4中将Json字符串转换为Json对象

来自分类Dev

在Swift中将JSON对象解码为纯字符串

来自分类Dev

如何将这个.plist文件直接解析为Swift中的对象?

来自分类Dev

在Swift中解析Json

来自分类Dev

在SWIFT中解析JSON

来自分类Dev

在Swift中对NSDictionary对象的NSArray进行排序

来自分类Dev

在 Swift 3 中解析 JSON 时出错

来自分类Dev

在Swift 3中正确解析JSON

来自分类Dev

无法在Swift 5中将编码的json数据对象写入本地文件

来自分类Dev

如何在Swift 3中将edgeForExtendedLayout设置为none

来自分类Dev

如何在Swift 3中将视图控制器设置为初始屏幕?

来自分类Dev

如何在swift 3中将Tableviewcell显示为气泡?

来自分类Dev

有没有一种理智的方法可以将具有未知结构的嵌套 JSON 解析为 Swift 5 中的对象或字典?