我是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
请帮忙
答案 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"]
一样