试图解析一些json,但我收到一个关键错误 - Django

时间:2017-09-10 23:24:34

标签: python json django

我有一个请求,我发送到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'>

1 个答案:

答案 0 :(得分:1)

错误来自json加载行

response = json.loads(user)

这是因为json.loads需要一个可以转换为json字典的字符串对象,但它正在传递一个user对象,从而抛出一个TypeError。

在您的情况下,由于user.json的类型是字典,我们可以简单地用以下代码替换响应行:

response = user.json