[英]Extracting certain data from json
https://www.huobi.com/p/api/contents/
您好,我想从此api中提取所有标题,并查看标题中是否有任何更改。.我该如何使用python呢?
我收到此错误:
before_set = before['data']['items']['title']
TypeError: list indices must be integers or slices, not str
这是我的代码:
import requests
import json
try:
with open('notice.json', 'r') as current_notice:
before = json.loads(current_notice.read())
except IOError:
before = requests.get('https://www.huobi.com/p/api/contents/').json()
with open('notice.json', 'w') as current_notice:
current_notice.write(json.dumps(before))
print("First run....")
after = requests.get('https://www.huobi.com/p/api/contents/').json()
before_set = before['data']['items']['title']
after_set = after['data']['items']['title']
new_set = after_set - before_set
while True:
try:
if not new_set:
print("No change... Exiting.")
if new_set:
print("There are changes")
except Exception as e:
print(e)
pass
before['data']['items']
包含before['data']['items']
是一个列表。 您将使用以下命令访问第一项的标题:
before['data']['items'][0]['title']
要获取所有标题,可以使用列表理解:
before_set = [item['title'] for item in before['data']['items']]
您具有ID列表以实现最佳可视化效果,我建议您将数据与ID进行比较,例如:
bitems = before.get('data', {}).get('items', [])
before_data = [(item.get('id'), item.get('title')) for item in bitems]
aitems = after.get('data', {}).get('items', [])
after_data = [(item.get('id'), item.get('title')) for item in aitems]
compare = set(before_data) ^ set(after_data)
print(compare)
这里的问题是response ['data'] ['items']以列表的形式出现
type(response['data']['items'])
<class 'list'>
您可以使用列表理解来解决此问题,也可以尝试使用集合中的默认字典
这是因为before['data']['items']
具有多个项目,因此它返回一个数组
您可以像这样遍历列表:
for item in before['data']['items']:
print item['title']
或者您也可以将所有标题保存到一个变量中,例如:
titles = [item['title'] for item in before['data']['items']]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.