从 Json 文件中提取值(python)

Exctract a value from a Json file(python)

提问人: 提问时间:4/28/2022 更新时间:4/28/2022 访问量:50

问:

嗨,我不是专家,这个问题让我卡住了很长时间,我希望这里有人可以帮助我 我想从以下json文件中提取值“interestExpense”:

{'incomeBeforeTax': 17780000000, 
'minorityInterest': 103000000, 
'netIncome': 17937000000, 
'sellingGeneralAdministrative': 5918000000, 
'grossProfit': 16507000000, 
'ebit': 10589000000, 
'endDate': 1640908800, 
'operatingIncome': 10589000000, 
'interestExpense': -1803000000, 
'incomeTaxExpense': -130000000, 
'totalRevenue': 136341000000, 
'totalOperatingExpenses': 125752000000, 
'costOfRevenue': 119834000000, 
'totalOtherIncomeExpenseNet': 7191000000, 
'netIncomeFromContinuingOps': 17910000000, 
'netIncomeApplicableToCommonShares': 17937000000}

在这种情况下,结果应该是 -130000000 作为字符串,但我试图找到一种方法来创建一个包含所有这些浮点数的列表(或数组),以便我可以决定选择哪一个,我不知道如何操作这种数据(json) 例如

print(list[0])

应返回 17780000000(与税前收入相关的值) 这真的可能吗? 输出是从以下代码生成的:

annual_is_stms=[]
url_financials ='https://finance.yahoo.com/quote/{}/financials?p{}'
stock= 'F'

response = requests.get(url_financials.format(stock,stock),headers=headers)
soup = BeautifulSoup(response.text,'html.parser')
pattern = re.compile(r'\s--\sData\s--\s')
script_data = soup.find('script',text=pattern).contents[0]

script_data[:500]

script_data[-500:]

start = script_data.find("context")-2
json_data =json.loads(script_data[start:-12])
json_data['context']['dispatcher']['stores']['QuoteSummaryStore'].keys()

#all data relative financials

annual_is=json_data['context']['dispatcher']['stores']['QuoteSummaryStore']['incomeStatementHistory']['incomeStatementHistory']
for s in annual_is:
    statement = {}
    for key, val in s.items():
        try:
            statement[key] = val['raw']
        except TypeError:
            continue
        except KeyError:
            continue
    annual_is_stms.append(statement)
print(annual_is_stms[0])
python 数组 json 列表 浮点

评论

2赞 stdunbar 4/28/2022
你用的是什么编程语言?
0赞 4/28/2022
我的糟糕 PYTHON 我正在编辑帖子
1赞 quamrana 4/28/2022
您的“代码”片段看起来像一个 python 字典,而不是 json。也许您可以包含生成此输出的代码。
0赞 Baris Ozensel 4/28/2022
你为什么不直接说要得到 17780000000 值?result['incomeBeforeTax']
0赞 4/28/2022
我编辑了帖子以使其更清晰

答:

0赞 Languré 4/28/2022 #1

如果您使用的是 python,则需要包含 json 模块并将其解析为对象:

import json

# some JSON:
x =  '{ "name":"John", "age":30, "city":"New York"}'

# parse x:
y = json.loads(x)

# the result is a Python dictionary:
print(y["age"])

问候

L.

-1赞 Max 4/28/2022 #2

将其复制并粘贴到 Python 中。

data = {'incomeBeforeTax': 17780000000, 
'minorityInterest': 103000000, 
'netIncome': 17937000000, 
'sellingGeneralAdministrative': 5918000000, 
'grossProfit': 16507000000, 
'ebit': 10589000000, 
'endDate': 1640908800, 
'operatingIncome': 10589000000, 
'interestExpense': -1803000000, 
'incomeTaxExpense': -130000000, 
'totalRevenue': 136341000000, 
'totalOperatingExpenses': 125752000000, 
'costOfRevenue': 119834000000, 
'totalOtherIncomeExpenseNet': 7191000000, 
'netIncomeFromContinuingOps': 17910000000, 
'netIncomeApplicableToCommonShares': 17937000000}

print(data['interestExpense'])

评论

0赞 4/28/2022
起初它不起作用,但经过几次尝试,我设法使用了正确的语法,感谢您的支持
0赞 quamrana 4/28/2022 #3

好的,所以你发布的输出片段来自这一行:

print(annual_is_stms[0])

如果你现在想要: 你应该做:-1803000000

print(annual_is_stms[0]['interestExpense'])

如果你想要: 你应该做:-130000000

print(annual_is_stms[0]['incomeTaxExpense'])

如果你想要: 你应该做:17780000000

print(annual_is_stms[0]['incomeBeforeTax'])