从json数组中提取一个值

时间:2019-09-02 22:06:23

标签: python json dictionary

我正在编写一个程序,以显示来自Twitter的基于位置的趋势主题。 我可以从twitter获得json响应,也可以使用json.loads()将其转换为字典

我无法从字典中提取单个值。

Json的回复是:

[
  {
    "trends": [
      {
        "name": "#UnrivalledVerithanamRecords",
        "url": "http://twitter.com/search?q=%23UnrivalledVerithanamRecords",
        "promoted_content": null,
        "query": "%23UnrivalledVerithanamRecords",
        "tweet_volume": 383837
      },
      {
        "name": "#justiceformadhav",
        "url": "http://twitter.com/search?q=%23justiceformadhav",
        "promoted_content": null,
        "query": "%23justiceformadhav",
        "tweet_volume": null
      },
      {
        "name": "#WaitingFor_T_H_A_L_A_60",
        "url": "http://twitter.com/search?q=%23WaitingFor_T_H_A_L_A_60",
        "promoted_content": null,
        "query": "%23WaitingFor_T_H_A_L_A_60",
        "tweet_volume": 403385
      },
      {
        "name": "#Vanitha",
        "url": "http://twitter.com/search?q=%23Vanitha",
        "promoted_content": null,
        "query": "%23Vanitha",
        "tweet_volume": null
      },
      {
        "name": "#OpenTheDoorForKavin",
        "url": "http://twitter.com/search?q=%23OpenTheDoorForKavin",
        "promoted_content": null,
        "query": "%23OpenTheDoorForKavin",
        "tweet_volume": 22660
      },
      {
        "name": "world test championship",
        "url": "http://twitter.com/search?q=%22world+test+championship%22",
        "promoted_content": null,
        "query": "%22world+test+championship%22",
        "tweet_volume": null
      },
      {
        "name": "subscribed",
        "url": "http://twitter.com/search?q=subscribed",
        "promoted_content": null,
        "query": "subscribed",
        "tweet_volume": null
      },
      {
        "name": "Navas",
        "url": "http://twitter.com/search?q=Navas",
        "promoted_content": null,
        "query": "Navas",
        "tweet_volume": 101256
      },
      {
        "name": "Icardi",
        "url": "http://twitter.com/search?q=Icardi",
        "promoted_content": null,
        "query": "Icardi",
        "tweet_volume": 196170
      },
      {
        "name": "\u0917\u0923\u092a\u0924\u093f \u092c\u092a\u094d\u092a\u093e",
        "url": "http://twitter.com/search?q=%22%E0%A4%97%E0%A4%A3%E0%A4%AA%E0%A4%A4%E0%A4%BF+%E0%A4%AC%E0%A4%AA%E0%A5%8D%E0%A4%AA%E0%A4%BE%22",
        "promoted_content": null,
        "query": "%22%E0%A4%97%E0%A4%A3%E0%A4%AA%E0%A4%A4%E0%A4%BF+%E0%A4%AC%E0%A4%AA%E0%A5%8D%E0%A4%AA%E0%A4%BE%22",
        "tweet_volume": 51477
      },
      {
        "name": "#EconomyKhatreMeinHai",
        "url": "http://twitter.com/search?q=%23EconomyKhatreMeinHai",
        "promoted_content": null,
        "query": "%23EconomyKhatreMeinHai",
        "tweet_volume": 18215
      },
      {
        "name": "#VoteForKavin",
        "url": "http://twitter.com/search?q=%23VoteForKavin",
        "promoted_content": null,
        "query": "%23VoteForKavin",
        "tweet_volume": 35500
      },
      {
        "name": "#mohammedshami",
        "url": "http://twitter.com/search?q=%23mohammedshami",
        "promoted_content": null,
        "query": "%23mohammedshami",
        "tweet_volume": null
      },
      {
        "name": "#PakTorturesMinorities",
        "url": "http://twitter.com/search?q=%23PakTorturesMinorities",
        "promoted_content": null,
        "query": "%23PakTorturesMinorities",
        "tweet_volume": null
      },
      {
        "name": "#NammaBengaluru",
        "url": "http://twitter.com/search?q=%23NammaBengaluru",
        "promoted_content": null,
        "query": "%23NammaBengaluru",
        "tweet_volume": null
      },
      {
        "name": "#congaccusesnonmuslims",
        "url": "http://twitter.com/search?q=%23congaccusesnonmuslims",
        "promoted_content": null,
        "query": "%23congaccusesnonmuslims",
        "tweet_volume": null
      },
      {
        "name": "#PawanJaiswal",
        "url": "http://twitter.com/search?q=%23PawanJaiswal",
        "promoted_content": null,
        "query": "%23PawanJaiswal",
        "tweet_volume": null
      },
      {
        "name": "#MudinjaOpenPandraDoorah",
        "url": "http://twitter.com/search?q=%23MudinjaOpenPandraDoorah",
        "promoted_content": null,
        "query": "%23MudinjaOpenPandraDoorah",
        "tweet_volume": 37035
      },
      {
        "name": "#ZomatoExposed",
        "url": "http://twitter.com/search?q=%23ZomatoExposed",
        "promoted_content": null,
        "query": "%23ZomatoExposed",
        "tweet_volume": null
      },
      {
        "name": "#KingKohli",
        "url": "http://twitter.com/search?q=%23KingKohli",
        "promoted_content": null,
        "query": "%23KingKohli",
        "tweet_volume": null
      },
      {
        "name": "#JohnWick",
        "url": "http://twitter.com/search?q=%23JohnWick",
        "promoted_content": null,
        "query": "%23JohnWick",
        "tweet_volume": null
      },
      {
        "name": "#GaneshChaturthi",
        "url": "http://twitter.com/search?q=%23GaneshChaturthi",
        "promoted_content": null,
        "query": "%23GaneshChaturthi",
        "tweet_volume": 254529
      },
      {
        "name": "#HappyBirthdayPawanKalyan",
        "url": "http://twitter.com/search?q=%23HappyBirthdayPawanKalyan",
        "promoted_content": null,
        "query": "%23HappyBirthdayPawanKalyan",
        "tweet_volume": 4559770
      },
      {
        "name": "#\u0917\u0923\u0947\u0936_\u091a\u0924\u0941\u0930\u094d\u0925\u0940",
        "url": "http://twitter.com/search?q=%23%E0%A4%97%E0%A4%A3%E0%A5%87%E0%A4%B6_%E0%A4%9A%E0%A4%A4%E0%A5%81%E0%A4%B0%E0%A5%8D%E0%A4%A5%E0%A5%80",
        "promoted_content": null,
        "query": "%23%E0%A4%97%E0%A4%A3%E0%A5%87%E0%A4%B6_%E0%A4%9A%E0%A4%A4%E0%A5%81%E0%A4%B0%E0%A5%8D%E0%A4%A5%E0%A5%80",
        "tweet_volume": 52427
      },
      {
        "name": "#happybirthdaypowerstar",
        "url": "http://twitter.com/search?q=%23happybirthdaypowerstar",
        "promoted_content": null,
        "query": "%23happybirthdaypowerstar",
        "tweet_volume": 202196
      },
      {
        "name": "#MondayMotivation",
        "url": "http://twitter.com/search?q=%23MondayMotivation",
        "promoted_content": null,
        "query": "%23MondayMotivation",
        "tweet_volume": 122241
      },
      {
        "name": "#AbhinandanVarthaman",
        "url": "http://twitter.com/search?q=%23AbhinandanVarthaman",
        "promoted_content": null,
        "query": "%23AbhinandanVarthaman",
        "tweet_volume": 17277
      },
      {
        "name": "#RomilaThapar",
        "url": "http://twitter.com/search?q=%23RomilaThapar",
        "promoted_content": null,
        "query": "%23RomilaThapar",
        "tweet_volume": null
      },
      {
        "name": "#VinayagarChaturthi",
        "url": "http://twitter.com/search?q=%23VinayagarChaturthi",
        "promoted_content": null,
        "query": "%23VinayagarChaturthi",
        "tweet_volume": 19151
      },
      {
        "name": "#kulbhushanjadhav",
        "url": "http://twitter.com/search?q=%23kulbhushanjadhav",
        "promoted_content": null,
        "query": "%23kulbhushanjadhav",
        "tweet_volume": null
      },
      {
        "name": "#BoycottRedLabel",
        "url": "http://twitter.com/search?q=%23BoycottRedLabel",
        "promoted_content": null,
        "query": "%23BoycottRedLabel",
        "tweet_volume": null
      },
      {
        "name": "#mondaythoughts",
        "url": "http://twitter.com/search?q=%23mondaythoughts",
        "promoted_content": null,
        "query": "%23mondaythoughts",
        "tweet_volume": 41792
      },
      {
        "name": "#\u0bb5\u0bbf\u0ba8\u0bbe\u0baf\u0b95\u0bb0\u0bcd\u0b9a\u0ba4\u0bc1\u0bb0\u0bcd\u0ba4\u0bcd\u0ba4\u0bbf",
        "url": "http://twitter.com/search?q=%23%E0%AE%B5%E0%AE%BF%E0%AE%A8%E0%AE%BE%E0%AE%AF%E0%AE%95%E0%AE%B0%E0%AF%8D%E0%AE%9A%E0%AE%A4%E0%AF%81%E0%AE%B0%E0%AF%8D%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF",
        "promoted_content": null,
        "query": "%23%E0%AE%B5%E0%AE%BF%E0%AE%A8%E0%AE%BE%E0%AE%AF%E0%AE%95%E0%AE%B0%E0%AF%8D%E0%AE%9A%E0%AE%A4%E0%AF%81%E0%AE%B0%E0%AF%8D%E0%AE%A4%E0%AF%8D%E0%AE%A4%E0%AE%BF",
        "tweet_volume": null
      },
      {
        "name": "#HappyBirthdayKichchaSudeep",
        "url": "http://twitter.com/search?q=%23HappyBirthdayKichchaSudeep",
        "promoted_content": null,
        "query": "%23HappyBirthdayKichchaSudeep",
        "tweet_volume": 27395
      },
      {
        "name": "#herofirstlook",
        "url": "http://twitter.com/search?q=%23herofirstlook",
        "promoted_content": null,
        "query": "%23herofirstlook",
        "tweet_volume": 60975
      },
      {
        "name": "#28DaysOfKashmirShutdown",
        "url": "http://twitter.com/search?q=%2328DaysOfKashmirShutdown",
        "promoted_content": null,
        "query": "%2328DaysOfKashmirShutdown",
        "tweet_volume": 41193
      },
      {
        "name": "#matkaroforward",
        "url": "http://twitter.com/search?q=%23matkaroforward",
        "promoted_content": null,
        "query": "%23matkaroforward",
        "tweet_volume": null
      },
      {
        "name": "#Mirzapur",
        "url": "http://twitter.com/search?q=%23Mirzapur",
        "promoted_content": null,
        "query": "%23Mirzapur",
        "tweet_volume": 11950
      },
      {
        "name": "#Chandrayaan2",
        "url": "http://twitter.com/search?q=%23Chandrayaan2",
        "promoted_content": null,
        "query": "%23Chandrayaan2",
        "tweet_volume": 25911
      },
      {
        "name": "#ARSTOT",
        "url": "http://twitter.com/search?q=%23ARSTOT",
        "promoted_content": null,
        "query": "%23ARSTOT",
        "tweet_volume": 19960
      },
      {
        "name": "#mahapackageforpuri",
        "url": "http://twitter.com/search?q=%23mahapackageforpuri",
        "promoted_content": null,
        "query": "%23mahapackageforpuri",
        "tweet_volume": null
      },
      {
        "name": "#GodMorningMonday",
        "url": "http://twitter.com/search?q=%23GodMorningMonday",
        "promoted_content": null,
        "query": "%23GodMorningMonday",
        "tweet_volume": 64217
      },
      {
        "name": "#INXMediaCase",
        "url": "http://twitter.com/search?q=%23INXMediaCase",
        "promoted_content": null,
        "query": "%23INXMediaCase",
        "tweet_volume": null
      },
      {
        "name": "#ENPTWeekBegins",
        "url": "http://twitter.com/search?q=%23ENPTWeekBegins",
        "promoted_content": null,
        "query": "%23ENPTWeekBegins",
        "tweet_volume": 53345
      },
      {
        "name": "#ak60\u0ca4\u0cb2\u0cbe60\u0985\u099c\u09bf\u09a460\u0d85\u0da2\u0dd2\u0dad\u0dca60",
        "url": "http://twitter.com/search?q=%23ak60%E0%B2%A4%E0%B2%B2%E0%B2%BE60%E0%A6%85%E0%A6%9C%E0%A6%BF%E0%A6%A460%E0%B6%85%E0%B6%A2%E0%B7%92%E0%B6%AD%E0%B7%8A60",
        "promoted_content": null,
        "query": "%23ak60%E0%B2%A4%E0%B2%B2%E0%B2%BE60%E0%A6%85%E0%A6%9C%E0%A6%BF%E0%A6%A460%E0%B6%85%E0%B6%A2%E0%B7%92%E0%B6%AD%E0%B7%8A60",
        "tweet_volume": 25604
      },
      {
        "name": "#\u0917\u0923\u092a\u0924\u093f_\u092c\u092a\u094d\u092a\u093e_\u092e\u094b\u0930\u092f\u093e",
        "url": "http://twitter.com/search?q=%23%E0%A4%97%E0%A4%A3%E0%A4%AA%E0%A4%A4%E0%A4%BF_%E0%A4%AC%E0%A4%AA%E0%A5%8D%E0%A4%AA%E0%A4%BE_%E0%A4%AE%E0%A5%8B%E0%A4%B0%E0%A4%AF%E0%A4%BE",
        "promoted_content": null,
        "query": "%23%E0%A4%97%E0%A4%A3%E0%A4%AA%E0%A4%A4%E0%A4%BF_%E0%A4%AC%E0%A4%AA%E0%A5%8D%E0%A4%AA%E0%A4%BE_%E0%A4%AE%E0%A5%8B%E0%A4%B0%E0%A4%AF%E0%A4%BE",
        "tweet_volume": null
      },
      {
        "name": "#vikramlander",
        "url": "http://twitter.com/search?q=%23vikramlander",
        "promoted_content": null,
        "query": "%23vikramlander",
        "tweet_volume": null
      },
      {
        "name": "#ManmohanSingh",
        "url": "http://twitter.com/search?q=%23ManmohanSingh",
        "promoted_content": null,
        "query": "%23ManmohanSingh",
        "tweet_volume": null
      },
      {
        "name": "#drsinghoneconomiccrisis",
        "url": "http://twitter.com/search?q=%23drsinghoneconomiccrisis",
        "promoted_content": null,
        "query": "%23drsinghoneconomiccrisis",
        "tweet_volume": null
      },
      {
        "name": "#happybirthdayjungkook",
        "url": "http://twitter.com/search?q=%23happybirthdayjungkook",
        "promoted_content": null,
        "query": "%23happybirthdayjungkook",
        "tweet_volume": 119143
      }
    ],
    "as_of": "2019-09-02T22:02:12Z",
    "created_at": "2019-09-02T21:57:15Z",
    "locations": [
      {
        "name": "Ahmedabad",
        "woeid": 2295402
      }
    ]
  }
]

我的代码是

CONSUMER_KEY = 'xxx'
CONSUMER_SECRET = 'xxx'
ACCESS_KEY = 'xxx-xxx'
ACCESS_SECRET = 'xxx'


auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_KEY, ACCESS_SECRET)
tweepyapi = tweepy.API(auth)

print(json.dumps(tweepyapi.trends_place(2295402)))
my_dict = json.loads(json.dumps(tweepyapi.trends_place(2295402), indent=2))
print(my_dict['trends']['name'])

我收到以下错误: TypeError: list indices must be integers or slices, not str

如何从响应中仅提取“名称”?

2 个答案:

答案 0 :(得分:1)

问题在于您有一个对象列表(注意JSON如何以方括号开头),因此您必须访问适当的索引才能获取信息。示例:

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

这应该从第一个条目中获得“趋势”,然后从中获得第一个趋势的名称。

答案 1 :(得分:0)

我会使用pandas,因为它使访问数据更加容易。

  • 如果将my_dict加载到pandas.DataFrame中,所有信息将更易于访问并从中提取商业智能。
  • my_dict[0]["trends"][0]["name"]不需要这种索引来查找简单的信息

创建一个DataFrame

import pandas as pd
from pandas.io.json import json_normalize

df = df = json_normalize(my_dict, record_path='trends')

df的输出:

                         name                                                         url  promoted_content                           query  tweet_volume
 #UnrivalledVerithanamRecords  http://twitter.com/search?q=%23UnrivalledVerithanamRecords               NaN  %23UnrivalledVerithanamRecords      383837.0
            #justiceformadhav             http://twitter.com/search?q=%23justiceformadhav               NaN             %23justiceformadhav           NaN
     #WaitingFor_T_H_A_L_A_60      http://twitter.com/search?q=%23WaitingFor_T_H_A_L_A_60               NaN      %23WaitingFor_T_H_A_L_A_60      403385.0
                     #Vanitha                      http://twitter.com/search?q=%23Vanitha               NaN                      %23Vanitha           NaN
         #OpenTheDoorForKavin          http://twitter.com/search?q=%23OpenTheDoorForKavin               NaN          %23OpenTheDoorForKavin       22660.0

现在可以更轻松地访问任何数据:

返回name

df.name.head()  # return top 5 names for example

0    #UnrivalledVerithanamRecords
1               #justiceformadhav
2        #WaitingFor_T_H_A_L_A_60
3                        #Vanitha
4            #OpenTheDoorForKavin
Name: name, dtype: object

返回tweet_volume>一些数字:

df[df.tweet_volume > 300_000]

                         name                                                         url  promoted_content                           query  tweet_volume
 #UnrivalledVerithanamRecords  http://twitter.com/search?q=%23UnrivalledVerithanamRecords               NaN  %23UnrivalledVerithanamRecords      383837.0
     #WaitingFor_T_H_A_L_A_60      http://twitter.com/search?q=%23WaitingFor_T_H_A_L_A_60               NaN      %23WaitingFor_T_H_A_L_A_60      403385.0
    #HappyBirthdayPawanKalyan     http://twitter.com/search?q=%23HappyBirthdayPawanKalyan               NaN     %23HappyBirthdayPawanKalyan     4559770.0