I am writing a class object that uses python requests to read json from a URL. The json string is strange as the floats, dates, and integers are strings.
{
"financialStatementList" : [ {
"symbol" : "HUBS",
"financials" : [ {
"date" : "2018-12-31",
"Revenue" : "512980000.0",
"Revenue Growth" : "0.3657",
"Cost of Revenue" : "100357000.0",
"Gross Profit" : "412623000.0",
"R&D Expenses" : "117603000.0",
"SG&A Expense" : "343278000.0",
"Operating Expenses" : "460881000.0",
"Operating Income" : "-48258000.0",
"Interest Expense" : "21386000.0",
"Earnings before Tax" : "-61960000.0",
"Income Tax Expense" : "1868000.0",
"Net Income - Non-Controlling int" : "0.0",
"Net Income - Discontinued ops" : "0.0",
"Net Income" : "-63828000.0",
"Preferred Dividends" : "0.0",
"Net Income Com" : "-63828000.0",
"EPS" : "-1.66",
"EPS Diluted" : "-1.66",
"Weighted Average Shs Out" : "39232269.0",
"Weighted Average Shs Out (Dil)" : "38529000.0",
"Dividend per Share" : "0.0",
"Gross Margin" : "0.8044",
"EBITDA Margin" : "-0.033",
"EBIT Margin" : "-0.0791",
"Profit Margin" : "-0.124",
"Free Cash Flow margin" : "0.1002",
"EBITDA" : "-17146000.0",
"EBIT" : "-40574000.0",
"Consolidated Income" : "-63828000.0",
"Earnings Before Tax Margin" : "-0.1208",
"Net Profit Margin" : "-0.1244"
}
An example of the json at the api endpoint is here: financialmodelingprep.com
My problem is that when I decode this, I end up with objects/strings rather than floats or integers.
I've tried:
r = requests.get(url, params)
jd = json.loads(r.text)
as well as:
r = requests.get(url, params)
jd - r.json()
And, also variations using kwargs such as parse_float = float or parse_float=Decimal
My end goal is to get this into format with floats, int, and dates.
requestscan't do any magic there and turn them into numbers for you. You have to do that yourself.restuff. first tryint-- wrap it in thetry / catchblock, if it works -- you have int. next,float, again intry/catchblock. last one -- date conversion.