2016-10-04 2 views
0

Я пытаюсь реализовать простой опоки приложение, которое будет проходить в формате JSON файл в передней части, но получил ошибку следующим образом:TypeError: Ожидаемый байт Колба приложение

> 127.0.0.1 - - [04/Oct/2016 17:53:02] "GET /test HTTP/1.1" 500 - Traceback (most recent call last): File 
> "/Users/michelleshieh/anaconda2/lib/python2.7/site-packages/flask/app.py", 
> line 2000, in __call__ 
>  return self.wsgi_app(environ, start_response) File "/Users/michelleshieh/anaconda2/lib/python2.7/site-packages/flask/app.py", 
> line 1992, in wsgi_app 
>  return response(environ, start_response) File "/Users/michelleshieh/anaconda2/lib/python2.7/site-packages/werkzeug/wrappers.py", 
> line 1228, in __call__ 
>  app_iter, status, headers = self.get_wsgi_response(environ) File "/Users/michelleshieh/anaconda2/lib/python2.7/site-packages/werkzeug/wrappers.py", 
> line 1216, in get_wsgi_response 
>  headers = self.get_wsgi_headers(environ) File "/Users/michelleshieh/anaconda2/lib/python2.7/site-packages/werkzeug/wrappers.py", 
> line 1167, in get_wsgi_headers 
>  for x in self.response) File "/Users/michelleshieh/anaconda2/lib/python2.7/site-packages/werkzeug/wrappers.py", 
> line 1167, in <genexpr> 
>  for x in self.response) File "/Users/michelleshieh/anaconda2/lib/python2.7/site-packages/werkzeug/_compat.py", 
> line 112, in to_bytes 
>  raise TypeError('Expected bytes') TypeError: Expected bytes 
> 127.0.0.1 - - [04/Oct/2016 17:53:03] "GET /favicon.ico HTTP/1.1" 404 

Кодирование связано с URL '/ тест' является:

@app.route("/test",methods=['GET']) 

    def get_local_json(): 
     SITE_ROOT = os.path.realpath(os.path.dirname(__file__)) 
     json_url = os.path.join(SITE_ROOT, "static/data","predict.json") 
     #console.log("url is all right") 
     data = json.load(open(json_url)) 
     return app.response_class(data, content_type='application/json') 

И код coresponding для переднего конца:

$.getJSON('/test', function(data){ 
     var myData = []; 
     for(var i in data){ 
      var item = data[i]; 
      var myItem = []; 
      myItem.push(new Date(item.time).getTime()); 
      myItem.push(item.occupancy); 
      myData.push(myItem); 
     } 
     console.log(myData); 

Любые намеки apprec iated !!

+0

можно попробовать 'данных = json.load (открытый (json_url "Р.Б."))' –

+0

@ Жан-FrancoisFabre ТНХ, но ничего chagned. –

+0

это была дикая догадка. Сожалею. –

ответ

1

Вы возвращаете объект Python кроме bytes объекта здесь:

return app.response_class(data, content_type='application/json') 

Это не ответ JSON, который приведен неперекодированный список Python или словарь.

Просто вернуть данные в формате JSON без декодирование:

with open(json_url, 'rb') as json_file: 
     return app.response_class(json_file.read(), content_type='application/json') 

или если вы должны сделать что-то со структурой данных первым, перекодировать его обратно в формат JSON. Используйте функцию jsonify() утилиты для этого:

with open(json_url) as json_file: 
    data = json.load(json_file) 

# manipulate data as needed 

return jsonify(data) 
+0

Спасибо большое! –

Смежные вопросы