首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解析Mu-6 parse JSON响应?

如何解析Mu-6 parse JSON响应?
EN

Stack Overflow用户
提问于 2019-08-03 19:00:12
回答 1查看 208关注 0票数 0

如何解析来自Mu-6 parse的JSON响应?我正在调用res = artist_api.artist_search_get(format=format,q_artist=artist)方法

我得到的回应是

代码语言:javascript
复制
{'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:

代码语言:javascript
复制
    print(res['message']['body']['artist']['artist_id'])
代码语言:javascript
复制
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

我收到了一条错误消息:

代码语言:javascript
复制
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并不熟悉,所以我不知道我做错了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-03 20:10:08

您稍微搞砸了JSON-document的层次结构,使用下面的代码获得所需的值:

代码语言:javascript
复制
[artist['artist']['artist_id'] for artist in res['message']['body']['artist_list']]

作为一种替代方法,可以使用JSONPath-expression:$..artist_list..artist_id来获得相同的结果。

示例

代码语言:javascript
复制
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]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57341323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档