【问题标题】:Extracting certain data from json从json中提取某些数据
【发布时间】:2018-04-26 06:21:15
【问题描述】:

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            

【问题讨论】:

    标签: python json api extract


    【解决方案1】:

    before['data']['items'] 中包含的数据是一个列表。您可以使用以下方式访问第一项的标题:

    before['data']['items'][0]['title']
    

    要获取所有标题,您可以使用列表推导:

    before_set = [item['title'] for item in before['data']['items']]
    

    【讨论】:

      【解决方案2】:

      您有带有 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)
      

      【讨论】:

        【解决方案3】:

        这里的问题是 response['data']['items'] 以列表的形式出现

        type(response['data']['items'])
        <class 'list'>
        

        您可以使用列表推导来解决这个问题或尝试集合中的默认字典

        【讨论】:

          【解决方案4】:

          这是因为before['data']['items'] 有多个项目,因此它返回一个数组

          您可以像这样遍历列表:

          for item in before['data']['items']:
            print item['title']
          

          或者您可以将所有标题保存到一个变量中,例如:

          titles = [item['title'] for item in before['data']['items']]
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2022-01-13
            • 1970-01-01
            • 2013-04-26
            • 1970-01-01
            • 2011-09-07
            • 1970-01-01
            相关资源
            最近更新 更多