#python #json
Вопрос:
Я не продвинулся в Python Json. У меня есть эти результаты Json:
{
"href": "https://api.spotify.com/v1/users/wizzler/playlists",
"items": [
{
"collaborative": false,
"external_urls": {
"spotify": "http://open.spotify.com/user/wizzler/playlists/53Y8wT46QIMz5H4WQ8O22c"
},
"href": "https://api.spotify.com/v1/users/wizzler/playlists/53Y8wT46QIMz5H4WQ8O22c",
"id": "53Y8wT46QIMz5H4WQ8O22c",
"images": [],
"name": "Wizzlers Big Playlist",
"owner": {
"external_urls": {
"spotify": "http://open.spotify.com/user/wizzler"
},
"href": "https://api.spotify.com/v1/users/wizzler",
"id": "wizzler",
"type": "user",
"uri": "spotify:user:wizzler"
},
"public": true,
"snapshot_id": "bNLWdmhh HDsbHzhckXeDC0uyKyg4FjPI/KEsKjAE526usnz2LxwgyBoMShVL z ",
"tracks": {
"href": "https://api.spotify.com/v1/users/wizzler/playlists/53Y8wT46QIMz5H4WQ8O22c/tracks",
"total": 30
},
"type": "playlist",
"uri": "spotify:user:wizzler:playlist:53Y8wT46QIMz5H4WQ8O22c"
},
{
"collaborative": false,
"external_urls": {
"spotify": "http://open.spotify.com/user/wizzlersmate/playlists/1AVZz0mBuGbCEoNRQdYQju"
},
"href": "https://api.spotify.com/v1/users/wizzlersmate/playlists/1AVZz0mBuGbCEoNRQdYQju",
"id": "1AVZz0mBuGbCEoNRQdYQju",
"images": [],
"name": "Another Playlist",
"owner": {
"external_urls": {
"spotify": "http://open.spotify.com/user/wizzlersmate"
},
"href": "https://api.spotify.com/v1/users/wizzlersmate",
"id": "wizzlersmate",
"type": "user",
"uri": "spotify:user:wizzlersmate"
},
"public": true,
"snapshot_id": "Y0qg/IT5T02DKpw4uQKc/9RUrqQJ07hbTKyEeDRPOo9LU0g0icBrIXwVkHfQZ/aD",
"tracks": {
"href": "https://api.spotify.com/v1/users/wizzlersmate/playlists/1AVZz0mBuGbCEoNRQdYQju/tracks",
"total": 58
},
"type": "playlist",
"uri": "spotify:user:wizzlersmate:playlist:1AVZz0mBuGbCEoNRQdYQju"
}
],
"limit": 9,
"next": null,
"offset": 0,
"previous": null,
"total": 9
}
Теперь мне нужно извлечь только идентификаторы списка воспроизведения. Как это сделать?
Редактировать:
Я получаю данные Json, выполняя:
r = requests.get(BASE_URL 'users/' user_id '/playlists', headers=headers)
r = r.json()
print(r)
возвращаю мне данные Json. Когда я пытаюсь data = json.load(r)
Я получаю эти ошибки! AttributeError: 'dict' object has no attribute 'read'
Комментарии:
1.
playlist_ids = [item.get('id') for item in data.get('items')]
, будучи «данными», которые являются объектом JSON.
Ответ №1:
Сначала загрузите файл JSON, используя встроенную json
библиотеку.
import json
with open('path/to/json/file.json') as f:
data = json.load(f)
Затем используйте понимание списка, чтобы получить только идентификаторы.
playlist_ids = [item['id'] for item in data['items']]
Редактировать: Или, если вы уже проанализировали свой JSON, просто используйте понимание списка. Не делайте r = r.json()
этого , это приведет к сбросу объекта запроса к данным. Установите его в какую-нибудь другую переменную, data
все в порядке — data = r.json()
playlist_ids = [item['id'] for item in data['items']]
Правка 2: Если вы хотите , чтобы он был только там, где указан идентификатор владельца "wizzler"
, добавьте предложение if в понимание списка.
playlist_ids = [item['id'] for item in data['items'] if item['owner']['id'] == 'wizzler']
Комментарии:
1. Я не могу сделать data = json.load(r) пожалуйста, посмотрите мою правку
2. Эй. Отредактировал мой ответ.
3. Я думал , вы опубликовали комментарий, в котором спрашивали меня, есть ли способ фильтровать только там, где указан идентификатор владельца
"wizzler"
, теперь он, похоже, удален? Если вам не нужна эта функциональность, дайте мне знать, и я откатаю свое редактирование.