从数组中获取数据以响应Swift

时间:2019-10-01 10:25:47

标签: json swift

我正在点击一个API,响应如下所示,

 "responseBody": {
    "data": [
        "{\"AED_USD\":0.272255,\"USD_AED\":3.67305}"
    ]
}

我很困惑如何从该数组数据中提取AED_USD和USD_AED的值。我试图将所有响应都放在数组中,并尝试从索引库中获取值,但无法正常工作。我如何获得价值?我的代码是这样,

 let params = ["sourceCurrency":self.accountFromTxt.text!,
                  "targetCurrency":self.accountToTxt.text!] as [String : AnyObject]

    print(params)

    APIService.ExchangePrice(showActivityIndicator: true, parameters: params) { (responseObject) in
        if (responseObject?.status)!
        {
            self.print(responseObject?.data)

            self.exchangeRateArray.removeAll()

            if let usersDataArray = responseObject?.data as? [[String : Any]] {
                for userData in usersDataArray {
                    self.exchangeRateArray.append(ExchangeRateCurrency(JSON:userData)!)
                }

                if usersDataArray.count == 0
                {
                    //Empty Message
                    self.view.showEmptyScreenMessage(text: EmptyScreenMessages.transactionDetailMessage)
                }

                self.print(self.exchangeRateArray.count,self.exchangeRateArray[0])
            }
        }
        else
        {
            Utilities.showBar(text: responseObject?.errorObject?.message)
        }
    }

1 个答案:

答案 0 :(得分:0)

您的数据为字符串形式,将字符串更改为JSON NSdictonary。 尝试这样转换

let str = "{\"AED_USD\":0.272257,\"USD_AED\":3.673001}"
        if let data = str.data(using: String.Encoding.utf8) {
            do {
                let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any]
                print(json)
            } catch {
                print("Something went wrong")
            }
        }

//在您的代码中。

 let params = ["sourceCurrency":self.accountFromTxt.text!,
                      "targetCurrency":self.accountToTxt.text!] as [String : AnyObject]

        print(params)

        APIService.ExchangePrice(showActivityIndicator: true, parameters: params) { (responseObject) in
            if (responseObject?.status)!
            {
                self.print(responseObject?.data)

                self.exchangeRateArray.removeAll()

                if let usersDataArray = responseObject?.data as? [[String : Any]] {
                    for userData in usersDataArray {
                     print(userData)
 // if you get string from userData
            if let data = userData.data(using: String.Encoding.utf8) {
                do {
                    let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as? [String:Any]
                    print(json)
                } catch {
                    print("Something went wrong")
                }
            }
                    }

                    if usersDataArray.count == 0
                    {
                        //Empty Message
                        self.view.showEmptyScreenMessage(text: EmptyScreenMessages.transactionDetailMessage)
                    }

                    //self.print(self.exchangeRateArray.count,self.exchangeRateArray[0])
                }
            }
            else
            {
                Utilities.showBar(text: responseObject?.errorObject?.message)
            }
        }