Извлечение определенных данных из JSON - PullRequest
0 голосов
/ 26 апреля 2018

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            

Ответы [ 4 ]

0 голосов
/ 26 апреля 2018

у вас есть список с идентификаторами для лучшей визуализации, я рекомендовал вам сравнить данные с идентификатором, например:

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)
0 голосов
/ 26 апреля 2018

Проблема здесь в том, что ответ ['data'] ['items'] появляется в виде списка

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

Вы можете использовать понимание списка, чтобы обойти это, или попробовать стандартные значения из коллекций

0 голосов
/ 26 апреля 2018

это потому, что before['data']['items'] имеет несколько элементов и поэтому возвращает массив

вы можете перебирать список как:

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

или вы можете просто сохранить все заголовки в переменную, например:

titles = [item['title'] for item in before['data']['items']]
0 голосов
/ 26 апреля 2018

Данные, содержащиеся в before['data']['items'], представляют собой список. Вы получите доступ к названию первого элемента, используя:

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

Чтобы получить все названия, вы можете использовать понимание списка:

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