解析Json Data Swift问题

时间:2019-11-23 19:15:46

标签: json swift parsing

我在解析json数据时遇到问题。我可以打印“ myJson”,所以我知道链接正在工作,但是if let time = myJson [“ metrics”]!如? NSDictionary无法正常工作。有任何想法吗?

这就是myJson的样子

{        
    metrics = (
        {                        
        "Average Inventory" = "4031000000.0";                
        "Average Payables" = "51062000000.0";                
        "Average Receivables" = "47399500000.0";                
        "Book Value per Share" = "20.15";                
        "Capex per Share" = "-0.6184";                
        "Capex to Depreciation" = "-0.8735";                
        "Capex to Operating Cash Flow" = "0.1395";                
        "Capex to Revenue" = "0.0434";                
        "Cash per Share" = "10.8764";                
        "Current ratio" = "1.54";                
        "Debt to Assets" = "0.3192";                
        "Debt to Equity" = "1.194";                
        "Dividend Yield" = "0.0134";                
        "EV to Free cash flow" = "17.3127";                
        "EV to Operating cash flow" = "14.6943";                
        "EV to Sales" = "3.9191";                
        "Earnings Yield" = "0.0534";                
        "Enterprise Value" = "1019650744600.0";                
        "Enterprise Value over EBITDA" = "13.025";                
        "Free Cash Flow Yield" = "0.0582";                
        "Free Cash Flow per Share" = "4.927";                
        "Graham Net-Net" = "-0.0842";                
        "Graham Number" = "73.6675";                
        "Income Quality" = "1.4548";                
        "Intangibles to Total Assets" = "0.0";                
        "Interest Coverage" = "0.0";                
        "Interest Debt per Share" = "24.0596";                
        "Invested Capital" = "292001000000.0";                
        "Market Cap" = "1012160744600.0";                
        "Net Current Asset Value" = "-85209000000.0";                
        "Net Debt to EBITDA" = "0.388";                
        "Net Income per Share" = "3.0476";                
        "Operating Cash Flow per Share" = "4.4335";                
        "PB ratio" = "11.1154";                
        "PE ratio" = "18.7109";                
        "PFCF ratio" = "17.5607";                
        "POCF ratio" = "14.5863";                
        "PTB ratio" = "11.1154";                
        "Payout Ratio" = "0.252";                
        "Price to Sales Ratio" = "3.8903";                
        "R&D to Revenue" = "0.0642";                
        "Revenue per Share" = "14.2602";                
        "SG&A to Revenue" = "0.0715";                
        "Shareholders Equity per Share" = "20.1496";                
        "Stock-based compensation to Revenue" = "0.0234";                
        "Tangible Asset Value" = "338516000000.0";                
        "Tangible Book Value per Share" = "75.38";                
        "Working Capital" = "57101000000.0";                
        date = "2019-09-28";
        },        
        );   
    symbol = AAPL;
}

这是我的代码

func fetchFinancialMetrics(symbol:String) {

let url = URL(string: "https://financialmodelingprep.com/api/v3/company-key-metrics/\(symbol)?period=quarter")

let task = URLSession.shared.dataTask(with: url!) { (data, response, error) in
    if error != nil {
        print ("ERROR")
    } else {
        if let content = data {
            do {
                let myJson = try JSONSerialization.jsonObject(with: content, options: JSONSerialization.ReadingOptions.mutableContainers) as AnyObject

                if let time = myJson["metrics"] as? NSDictionary  {

                    for (key, value) in time {

                        if let value = value as? Dictionary<String, String> {

                            let date = value["date"]!
                            let revenuePerShare = value["Revenue per Share"]!
                            let netIncomePerShare = value["Net Income Per Share"]!
                            let operatingCashFlowPerShare = value["Operating Cash Flow per Share"]!
                            let freeCashFlowPerShare = value["Free Cash Flow per Share"]!
                            let cashPerShare = value["Cash per Share"]!
                            let bookValuePerShare = value["Book Value per Share"]!
                            let tangibleBookValuePerShare = value["Tangible Book Value per Share"]!
                            let shareholderEquityPerShare = value["Shareholders Equity per Share"]!
                            let interestDebtPerShare = value["Interest Debt per Share"]!
                            let marketCap = value["Market Cap"]!
                            let enterpriseValue = value["Enterprise Value"]!
                            let peRatio = value["PE ratio"]!
                            let priceToSalesRatio = value["Price to Sales Ratio"]!
                            let pocfRatio = value["POCF ratio"]!
                            let pfcfRatio = value["PFCF ratio"]!
                            let pbRatio = value["PB ratio"]!
                            let ptbRatio = value["PTB ratio"]!
                            let evToSales = value["EV to Sales"]!
                            let evOverEbitda = value["Enterprise Value over EBITDA"]!
                            let evToOperatingCashFlow = value["EV to Operating cash flow"]!
                            let evToFreeCashFlow = value["EV to Free cash flow"]!
                            let earningsYield = value["Earnings Yield"]!
                            let freeCashFlowYield = value["Free Cash Flow Yield"]!
                            let debtToEqutiy = value["Debt to Equity"]!
                            let debtToAssets = value["Debt to Assets"]!
                            let netDebtToEbitda = value["Net Debt to EBITDA"]!
                            let currentRatio = value["Current ratio"]!
                            let interestCoverage = value["Interest Coverage"]!
                            let incomeQuality = value["Income Quality"]!
                            let dividendYield = value["Dividend Yield"]!
                            let payoutRatio = value["Payout Ratio"]!
                            let sgaToRevenue = value["SG&A to Revenue"]!
                            let rdToRevenue = value["R&D to Revenue"]!
                            let intangiblesToTotalAssets = value["Intangibles to Total Assets"]!
                            let capexToOperatingCashFlow = value["Capex to Operating Cash Flow"]!
                            let capexToRevenue = value["Capex to Revenue"]!
                            let capexToDepreciation = value["Capex to Depreciation"]!
                            let stockBasedCompToRevenue = value["Stock-based compensation to Revenue"]!
                            let grahamNumber = value["Graham Number"]!
                            let grahamNetNet = value["Graham Net-net"]!
                            let workingCapital = value["Working Capital"]!
                            let tangibleAssetValue = value["Tangible Asset Value"]!
                            let netCurrentAssetValue = value["Net Current Asset Value"]!
                            let investedCapital = value["Invested Capital"]!
                            let averageReceivables = value["Average Receivables"]!
                            let averagePayables = value["Average Payables"]!
                            let averageInventory = value["Average Inventory"]!
                            let capexPerShare = value["Capex per Share"]!
                            // End of parse the individual components of the json and turn them into variables.

                            // Start of assigning the parsed individual components into an array
                            let dataCell = financialData(date: date, revenuePerShare: revenuePerShare, netIncomePerShare: netIncomePerShare, operatingCashFlowPerShare: operatingCashFlowPerShare, freeCashFlowPerShare: freeCashFlowPerShare, cashPerShare: cashPerShare, bookValuePerShare: bookValuePerShare, tangibleBookValuePerShare: tangibleBookValuePerShare, shareholderEquityPerShare: shareholderEquityPerShare, interestDebtPerShare: interestDebtPerShare, marketCap: marketCap, enterpriseValue: enterpriseValue, peRatio: peRatio, priceToSalesRatio: priceToSalesRatio, pocfRatio: pocfRatio, pfcfRatio: pfcfRatio, pbRatio: pbRatio, ptbRatio: ptbRatio, evToSales: evToSales, evOverEbitda: evOverEbitda, evToOperatingCashFlow: evToOperatingCashFlow, evToFreeCashFlow: evToFreeCashFlow, earningsYield: earningsYield, freeCashFlowYield: freeCashFlowYield, debtToEqutiy: debtToEqutiy, debtToAssets: debtToAssets, netDebtToEbitda: netDebtToEbitda, currentRatio: currentRatio, interestCoverage: interestCoverage, incomeQuality: incomeQuality, dividendYield: dividendYield, payoutRatio: payoutRatio, sgaToRevenue: sgaToRevenue, rdToRevenue: rdToRevenue, intangiblesToTotalAssets: intangiblesToTotalAssets, capexToOperatingCashFlow: capexToOperatingCashFlow, capexToRevenue: capexToRevenue, capexToDepreciation: capexToDepreciation, stockBasedCompToRevenue: stockBasedCompToRevenue, grahamNumber: grahamNumber, grahamNetNet: grahamNetNet, workingCapital: workingCapital, tangibleAssetValue: tangibleAssetValue, netCurrentAssetValue: netCurrentAssetValue, investedCapital: investedCapital, averageReceivables: averageReceivables, averagePayables: averagePayables, averageInventory: averageInventory, capexPerShare: capexPerShare)

                            financialArray.append(dataCell)
                        }
                    }
                }

            }  catch  {
                print(error.localizedDescription)
            }
        }
    }
}
task.resume()

}

1 个答案:

答案 0 :(得分:0)

首先,这不是JSON,而是字典的描述

第二,请阅读输出,()代表一个数组,{}一个字典。

所有第三种不使用NS...集合类型。使用本机Swift类型。

所有mutableContainers中的第四个在Swift中完全没有用,请省略该参数。

在有条件下调(as?)之前的所有感叹号中的第五个毫无意义。

第六,第七,第八和第九个静音。

if let metrics = myJson["metrics"] as? [[String:String]] {
   for dict in metrics {
       let date = dict["date"]!
       let revenuePerShare = dict["Revenue per Share"]!
       ...

使用Codable协议解析JSON更加舒适(高效)。