使用请求对象烧瓶获取json响应

时间:2014-08-20 06:37:22

标签: python json flask

web服务

@app.route('/get-details')
def getDetails():    
   cur.execute("select * from employee")
   rows = cur.fetchall()
   columns = [desc[0] for desc in cur.description]
   result = []
   for row in rows:
           row = dict(zip(columns, row))
           #json_row=json.dumps(row)
           result.append(row)

   json_response=json.dumps(result)
   response=Response(json_response,content_type='application/json; charset=utf-8')
   response.headers.add('content-length',len(json_response))
   response.status_code=200
   return response

网络服务器

@app.route('/get-details')
def getDetails():
      r=requests.get('http://localhost:8084/get-details')
      return r.json() #error in this line, however r.text is rendering the result but in html

错误

Error on request:
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 177, in run_wsgi
    execute(self.server.app)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 165, in execute
    application_iter = app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1836, in __call__
    return self.wsgi_app(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1820, in wsgi_app
    response = self.make_response(self.handle_exception(e))
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1403, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1817, in wsgi_app
    response = self.full_dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1478, in full_dispatch_request
    response = self.make_response(rv)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1577, in make_response
    rv = self.response_class.force_type(rv, request.environ)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/wrappers.py", line 827, in force_type
    response = BaseResponse(*_run_wsgi_app(response, environ))
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/wrappers.py", line 57, in _run_wsgi_app
    return _run_wsgi_app(*args)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/test.py", line 855, in run_wsgi_app
    app_iter = app(environ, start_response)
TypeError: 'list' object is not callable

如何处理从webservice返回的响应并将其视为json?

r.text返回[" {\"用户名\" :\" abhi \",\"传递\" :2087}"]这是一个String对象 我不知道r.json将如何格式化结果,但我想要像:

[{"用户名" :" abhi","传递" :2087}]我可以使用this来做,但我需要一个List而不是String才能做到这一点。

1 个答案:

答案 0 :(得分:3)

首先,使用.json()代替.json

然后,我认为你将json编码为你的数据。

尝试这样做:

for row in rows:
       row = dict(zip(columns, row))
       # REMOVED
       result.append(row)

json_response=json.dumps(result)
response=Response(json_response,content_type='application/json; charset=utf-8')
response.headers.add('content-length',len(json_response))
response.status_code=200
return response

获取详细信息

from flask import jsonify

@app.route('/get-details')
def getDetails():
      r=requests.get('http://localhost:8084/get-details')
      json_response=json.dumps(r.json())
      response=Response(json_response,content_type='application/json; charset=utf-8')
      response.headers.add('content-length',len(json_response))
      response.status_code=200
      return response