我有一个请求,我发送到API,我得到一个json格式的响应。我想从正在发回的响应中获取项目但没有从中获取任何内容。我收到的钥匙是我收到的错误。
从下面的响应中,我想获取响应中特定键的值,并将它们保存在变量中,最终将它们保存在我的数据库中。
以下是我的代码:
def createUserSynapse(request):
argss = {
'email': 'hello@synapsepay.com',
'phone_number': '555-555-5555',
'legal_name': 'Hello McHello',
'note': ':)', # optional
'supp_id': '123abc', # optional
'is_business': True,
'cip_tag': 1
}
user = SynapseUser.create(clients, **argss)
print(user.json)
response = json.loads(user)
if response:
_id = response['_id']
name = response.client['name']
link = response._links.self['href']
cip = response.extra['cip_tag']
supp = response.extra['supp_id']
print(name)
print(_id)
print(link)
print(cip)
print(supp)
以下是回复的示例:
{
'_id':'..4e57',
'_links':{
'self':{
'href':'https://uat-api.synapsefi.com/v3.1/users/..54e57'
}
},
'client':{
'id':'..26a34',
'name':'Charlie Brown LLC'
},
'doc_status':{
'physical_doc':'MISSING|INVALID',
'virtual_doc':'MISSING|INVALID'
},
'documents':[
],
'emails':[
],
'extra':{
'cip_tag':1,
'date_joined':1504774195147,
'extra_security':False,
'is_business':True,
'last_updated':1504774195147,
'public_note':None,
'supp_id':'123abc'
},
'is_hidden':False,
'legal_names':[
'Hello McHello'
],
'logins':[
{
'email':'hello@synapsepay.com',
'scope':'READ_AND_WRITE'
}
],
'permission':'UNVERIFIED',
'phone_numbers':[
'555-555-5555'
],
'photos':[
],
'refresh_token':'refresh_..G8LPqF6'
}
以下是我从浏览器中收到的错误:
TypeError at /setup_profile/
the JSON object must be str, bytes or bytearray, not 'User'
Request Method: POST
Request URL: http://127.0.0.1:8000/setup_profile/
Django Version: 1.8.6
Exception Type: TypeError
Exception Value:
the JSON object must be str, bytes or bytearray, not 'User'
**更新**
以下是我打印用户时的响应:
<class 'synapse_pay_rest.models.users.user.User'>({'client': <class 'synapse_pay_rest.client.Client'>(base_url=https://uat-api.synapsefi.com/v3.1), 'json': {'_id': '..920e6', '_links': {'self': {'href': 'https://uat-api.synapsefi.com/v3.1/users/..920e6'}}, 'client': {'id': '..026a34', 'name': 'Charlie Brown LLC'}, 'doc_status': {'physical_doc': 'MISSING|INVALID', 'virtual_doc': 'MISSING|INVALID'}, 'documents': [], 'emails': [], 'extra': {'cip_tag': 1, 'date_joined': 1505093840940, 'extra_security': False, 'is_business': True, 'last_updated': 1505093840940, 'public_note': None, 'supp_id': '123abc'}, 'is_hidden': False, 'legal_names': ['Hello McHello'], 'logins': [{'email': 'hello@synapsepay.com', 'scope': 'READ_AND_WRITE'}], 'permission': 'UNVERIFIED', 'phone_numbers': ['555-555-5555'], 'photos': [], 'refresh_token': 'refresh_..cYbeIrNA3P'}, 'id': '..920e6', 'refresh_token': 'refresh_..eIrNA3P', 'logins': [{'email': 'hello@synapsepay.com', 'scope': 'READ_AND_WRITE'}], 'phone_numbers': ['555-555-5555'], 'legal_names': ['Hello McHello'], 'permission': 'UNVERIFIED', 'note': None, 'supp_id': '123abc', 'is_business': True, 'cip_tag': 1, 'base_documents': 0, 'oauth_key': 'oauth_..dQZUJ', 'expires_in': '7200'})
以下是来自类型user并输入user.json:
type(user)返回
<class 'synapse_pay_rest.models.users.user.User'>
型(user.json)
<class 'dict'>
答案 0 :(得分:1)
错误来自json加载行
response = json.loads(user)
这是因为json.loads需要一个可以转换为json字典的字符串对象,但它正在传递一个user
对象,从而抛出一个TypeError。
在您的情况下,由于user.json的类型是字典,我们可以简单地用以下代码替换响应行:
response = user.json