簡體   English   中英

如何解析musixmatch python api JSON響應?

[英]How to parse musixmatch python api JSON response?

您如何解析musixmatch API的JSON響應? 我正在調用方法res = artist_api.artist_search_get(format = format,q_artist = artist)

我得到了回應

{'message': {'body': {'artist_list': [{'artist': {'artist_alias_list': [],
                                                  'artist_comment': '',
                                                  'artist_country': '',
                                                  'artist_credits': {'artist_list': []},
                                                  'artist_edit_url': None,
                                                  'artist_id': 26575484.0,
                                                  'artist_mbid': None,
                                                  'artist_name': 'Illenium',
                                                  'artist_name_translation_list': [],
                                                  'artist_rating': 55.0, .........

我正在嘗試獲取artist_id。

我試圖像這樣獲得artist_id:

    print(res['message']['body']['artist']['artist_id'])
artist_api = swagger_client.ArtistApi()
format = 'json' 

try:
    artist_list = ["adele", "lady gaga", "john legend"];
    for artist in artist_list:
        print(artist)
        res = artist_api.artist_search_get(format=format, q_artist=artist)
        print(res['message']['body']['artist']['artist_id'])
except ApiException as e:
    print "Exception when calling ArtistApi->artist_search_get: %s\n" % e

我收到此錯誤消息:

Traceback (most recent call last):
  File "musixmatch.py", line 39, in <module>
    print(res['message']['body']['artist_id'])
TypeError: 'InlineResponse2004' object has no attribute '__getitem__'

請幫助我搜索了很多線程,但仍然找不到答案。 我是python的新手,所以我不確定自己在做什么錯。

您對JSON文檔的層次結構有些混亂,請使用以下代碼獲取所需的值:

[artist['artist']['artist_id'] for artist in res['message']['body']['artist_list']]

或者,可以使用JSONPath -expression$..artist_list..artist_id獲得相同的結果。

from jsonpath_rw import parse
import json

res = json.loads("""{
  "message": {
    "header": {},
    "body": {
      "artist_list": [
        {
          "artist": {
            "artist_credits": {            },
            "artist_country": "string",
            "artist_id": 110
          }
        },
        {
          "artist": {
            "artist_credits": {},
            "artist_country": "string",
            "artist_id": 220
          }
        }        
      ]
    }
  }
}""")

# 1-way: Iterate through JSON-document
print([artist['artist']['artist_id'] for artist in res['message']['body']['artist_list']])
# result: [110, 220]

# 2-way: Use JSONPath-expression
jsonpath_expr = parse('$..artist_list..artist_id')
print([match.value for match in jsonpath_expr.find(res)])
# result: [110, 220]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM