json.dumps对我不起作用

问题描述 投票:0回答:1

我写了一个小的Python脚本来获取GitHub及其GraphQL API的响应。

这是我编码的内容:

import json
def pp_json(json_thing, sort=True, indents=4):
    if type(json_thing) is str:
        print(json.dumps(json.loads(json_thing),sort_key=sort, indent=indents))
    else:
        print(json.dumps(json_thing, sort_key=sort, indent=indents))
    return None

我可以使用我的请求输出启动此功能,如下所示:

url = 'https://api.github.com/graphql'
json = { "query" : """query {
  viewer {
    login
    name
    bio
    company
    location
  }
}""" 
        }
api_token = "hiddencontent"
headers = {'Authorization': 'token %s' % api_token}

result_tokentest = requests.post(url=url, json=json, headers=headers) # just Response Code
string_tokentest = result_tokentest.text

print (result_tokentest)
print (string_tokentest)
pp_json(result_tokentest)

我得到以下输出:

<Response [200]>
{"data":{"viewer":{"login":"datasienceelmo","name":"E.Lmo","bio":"Rohdaten sind geil!!","company":"Hochschule Ulm","location":"Ulm"}}}

--------------------------------------------------------------------------- AttributeError                            Traceback (most recent call last) <ipython-input-12-9c2eefbf15a2> in <module>()
     19 print (result_tokentest)
     20 print (string_tokentest)
---> 21 pp_json(result_tokentest)

<ipython-input-2-f2241ef62766> in pp_json(json_thing, sort, indents)
      4         print(json.dumps(json.loads(json_thing),sort_key=sort, indent=indents))
      5     else:
----> 6         print(json.dumps(json_thing, sort_key=sort, indent=indents))
      7     return None

AttributeError: 'dict' object has no attribute 'dumps'

我无法理解我的Python解释器的问题是什么,因为我导入了JSON。在文档中,我刚刚阅读了如何使用它,我就像他们那样做了。

python python-3.x github graphql
1个回答
1
投票

您重复使用全局名称json进行模块导入和字典。最后一个任务获胜,所以json现在引用字典,而不是模块。为字典使用不同的名称,例如json_data

json_data = { "query" : """query {
  viewer {
    login
    name
    bio
    company
    location
  }
}""" 

# ...

result_tokentest = requests.post(url=url, json=json_data, headers=headers)

并不是说你需要在这里使用json库; requests库支持通过调用response.json()方法本机解码JSON响应。您可以使用pprint library更好地打印结果:

from pprint import pprint

pprint(result_tokentest.json())

作为旁注:GraphQL查询本身不是JSON。使用json库解析或输出GraphQL查询没有意义。但是,可以在JSON文档中嵌入GraphQL查询。响应完全是JSON。

© www.soinside.com 2019 - 2024. All rights reserved.