Получение «TypeError: объект JSON должен быть str, bytes или bytearray, а не dict»

#python #json #tweepy

#python #json #tweepy

Вопрос:

У меня есть вывод json из Tweepy, который я сейчас пытаюсь проанализировать. Например, некоторые выходные данные являются трендовыми хэштегами для определенной области. Поскольку это большой результат, я пытаюсь определить, как эффективно анализировать все хэштеги. В выводе json есть другая информация, такая как userid , countrycode и т.д… Но меня интересуют только хэштеги, которые перечислены как name: '#gamenight например.

 # using Tweepy

api.trends_place(2295420)

import json 

# Here is a portion of the Tweepy output I received
trends = [{'trends': [{'name': '#RCBvKKR', 'url': 'http://twitter.com/search?q=#RCBvKKR', 'promoted_content': None, 'query': '#RCBvKKR', 'tweet_volume': 101508}, {'name': 'created_at': '2019-04-06T00:07:14Z', 'locations': [{'name': 'Bangalore', 'woeid': 2295420}]}]

hashtags = json.dumps(trends)

# Am trying to end up with a way of just extracting 'name' which I believe is how the hashtags are captured 

print(hashtags['name'])
  

Ответ №1:

Это должно быть hastags["trends"][0]["name"] для получения #RCBvKKR


Хорошо, я это исправил. Во-первых, опубликованный код сбивает с толку. Опубликованный вами json недопустим (скобки отсутствуют, а ключ name не имеет значения). Во-вторых, с помощью вашей команды json.dumps(trends) вы преобразуете уже действительный словарь python в строку, которая является массивом, таким образом, ошибка, ( string indices must be integers )

Фиксированная версия выглядит следующим образом:

 import json

trends = [{'trends': [{'name': '#RCBvKKR', 'url': 'http://twitter.com/search?q=#RCBvKKR', 'promoted_content': None, 'query': '#RCBvKKR', 'tweet_volume': 101508}, {'name':"This was missing", 'created_at': '2019-04-06T00:07:14Z', 'locations': [{'name': 'Bangalore', 'woeid': 2295420}]}]}]


print(trends[0]["trends"][0]["name"])
  

Теперь вывод #RCBvKKR

Если вы действительно получаете строку json из API, используйте json.parse(response) для преобразования строки в python dict.

Комментарии:

1. Я получил еще одну ошибку TypeError: строковые индексы должны быть целыми числами

2. @Tweep, да, я это исправил

3. Я думаю, что я неправильно пометил полученный мной вывод Tweepy как JSON, на самом деле не зная, было это или нет. Я все еще пытаюсь определить, в каком формате выводится Tweepy для api.trends_place. т. Е. Это массив, хэш, json?

4. Я также пытаюсь получить каждый экземпляр ‘name’, а не только ‘#RCBvKRR’