使用python-list索引解析JSON必须是整数而不是str

时间:2015-09-26 22:24:27

标签: python json

我是python的初学者,我正在尝试解析以下JSON。我无法找到如何获得歌曲的艺术家名称和标题。

{
       "status": {
           "msg": "Success",
           "code": 0,
           "version": "1.0"
       },
       "metadata": {
           "music": [
               {
                   "external_ids": {
                       "isrc": "USSM10603618",
                       "upc": "888880170897"
                   },
                   "play_offset_ms": 8920,
                   "external_metadata": {
                       "spotify": {
                           "album": {
                               "id": "0JLv6iVbeiy4Dh2eIw6FKI"
                           },
                           "artists": [
                               {
                                   "id": "6vWDO969PvNqNYHIOW5v0m"
                               }
                           ],
                           "track": {
                               "id": "3qSMg1lhn4jDwWlI9xCVyK"
                           }
                       },
                       "itunes": {
                           "album": {
                               "id": 464320979
                           },
                           "artists": [
                               {
                                   "id": 1419227
                               }
                           ],
                           "track": {
                               "id": 464321089
                           }
                       },
                       "deezer": {
                           "album": {
                               "id": 72429
                           },
                           "artists": [
                               {
                                   "id": 145
                               }
                           ],
                           "genres": [
                               {
                                   "id": 132
                               }
                           ],
                           "track": {
                               "id": 551232
                           }
                       }
                   },
                   "title": "Listen (From the Motion Picture \"Dreamgirls\")",
                   "duration_ms": "217786",
                   "album": {
                       "name": "B'Day Deluxe Edition"
                   },
                   "acrid": "4660601066a3153acf15eabe2868572b",
                   "genres": [
                       {
                           "name": "Pop"
                       }
                   ],
                   "artists": [
                       {
                           "name": "Beyoncé"
                       }
                   ]
               }
           ],
           "timestamp_utc": "2015-07-27 10:35:28"
       },
       "result_type": 0
}

我的代码是:

json_r=json.loads(res)
        print(json_r) 
        for i in json_r:
            song_name=json_r.metadata['music']['title']
            print song_name
            artist=json_r['metadata']['music']['artists']['name']
            s_t_id=json_r['metadata']['music']['external_metadata']['spotify']['track']['id']
            s_a_id=json_r['metadata']['music']['external_metadata']['spotify']['artists']['id']

我收到以下错误: list indices必须是整数而不是str

请帮忙

2 个答案:

答案 0 :(得分:1)

他们这样做的方式要简单得多:

self.items.push({'id': id, 'name': name});

尝试上面的代码,这将根据字典打印您的文件。 然后,您可以通过使用它的关键索引来简单地访问它的元素 访问它的价值是这样的:

import json
from pprint import pprint

with open('D:/data.json') as data_file:
    data = json.load(data_file)
pprint(data)

只需确保您尝试访问哪个元素,使其成为列表或字典,就像列表print data['status']['msg'] print data['metadata']['music'][0]['album']['name'] 一样,您可能需要使用索引,如第二个示例中所述。

答案 1 :(得分:0)

查看此数据:

                       "artists": [
                           {
                               "id": "6vWDO969PvNqNYHIOW5v0m"
                           }
                       ],
                       "track": {
                           "id": "3qSMg1lhn4jDwWlI9xCVyK"
                       }

你的"艺术家"数据是一个列表,这就是您无法像["artists"]["id"]那样访问它的原因,但["artists"][0]["id"]会有效。

请参阅下面的示例以获得更清晰的图片:

In [1]: a = [{"hello": "world"}, "yes I am"]

In [2]: a["hello"]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-817deb35df57> in <module>()
----> 1 a["hello"]

TypeError: list indices must be integers, not str

In [3]: a[0]
Out[3]: {'hello': 'world'}

In [4]: a[0]["hello"]
Out[4]: 'world'

In [5]: a[1]
Out[5]: 'yes I am'

因为&#34; a&#34;是一个列表,访问其元素可以通过索引完成,即。 a [0],a [1] ......

a[0]是一个字典{"hello": "world"},因此可以通过首先访问其索引0,然后键入&#34; hello&#34;来访问字典值,就像a[0]["hello"]一样