在解析 JSON 数据时,我从相同的 url 得到不同的结果

Posted

技术标签:

【中文标题】在解析 JSON 数据时,我从相同的 url 得到不同的结果【英文标题】:While parsing JSON data, I get different result, from same url 【发布时间】:2017-01-13 09:34:23 【问题描述】:

问题说明:每次我刷新viewController,都会得到不同的值。

必需的解决方案:每当我刷新时,它应该获取相同的值。

编码材料: 下面我通过 url 从 JSON 解析中获取值。获取值后,它作为参数传递给“setChart() 函数”。

 override func viewDidLoad() 

    super.viewDidLoad()
    var completedCalls = 0
            for i in 0..<strDates.count 
                Alamofire.request("http://api.fixer.io/\(strDates[i])?base=USD").responseJSON  response in
                    if let arr = response.result.value as? [String:AnyObject]
                    
                        completedCalls += 1
                        let inrc = (arr["rates"]?["INR"] as? Double)!
                        print(inrc)
                        self.sValues.append(inc)
                        print(sValues) 
                        //It prints values here.
                        if completedCalls = strDates.count 
                            DispatchQueue.main 
                                setChart(dataPoints: strDates, values: sValues)
                            
                        
                    
           
  

setChart() 函数

    func setChart(dataPoints: [String], values: [Double]) 
            barChartView.noDataText = "You need to provide data for the chart."

            for i in 0..<dataPoints.count 
                let dataEntry = BarChartDataEntry(x: Double(i), yValues: [values[i]])
                dataEntries.append(dataEntry)
            

            let chartDataSet = BarChartDataSet(values: dataEntries, label: "INR Rates(₹)/$")
            let chartData = BarChartData(dataSet: chartDataSet)
            barChartView.data = chartData
            barChartView.leftAxis.axisMinimum = 65
            barChartView.leftAxis.axisMaximum = 70
            barChartView.xAxis.labelPosition = .bottom
            barChartView.rightAxis.enabled = false
            barChartView.data?.setDrawValues(false)

        
   

【问题讨论】:

是的,没错,但我传递相同的日期来获取值。每当我刷新时再次。 我正在从 currentDate 解析过去 30 天的 INR 值。所以它应该得到与过去 30 天相同的值。 如果我要去哪里错了请纠正我。 为什么不向我们展示一些结果并告诉我们为什么它们不正确。 【参考方案1】:

您正在发出一系列异步请求,但您无法保证它们完成的顺序。

我建议在字典中捕获结果,以 strDates 作为键。然后您可以在呈现结果时以正确的顺序提取它们。


所以,我假设假设 sValues 定义为:

var sValues = [Double]()

将其更改为:

var sValues = [String: Double]()

然后,而不是:

self.sValues.append(inc)

你会这样做:

self.sValues[strDates[i]] = inc

然后,在您的图表代码中,遍历 strDates 数组,并使用这些日期字符串查找 sValues

【讨论】:

好的先生,我会在字典里得到结果。

以上是关于在解析 JSON 数据时,我从相同的 url 得到不同的结果的主要内容,如果未能解决你的问题,请参考以下文章

使用 swiftyJSON 在 Swift 2.0 中解析 JSON 时获取空值

JSON解析在IOS中得到错误NSErrorFailingURLKey

Unity:从远程源解析 JSON 时出错

如何解析具有相同键的不同数据类型的改造对象的json数组

如何使用来自 3rd 方站点的 URL 端点进行 JSON 响应

检索地震 JSON 结果时出现问题?