2016-12-24 68 views
1

我已經徹底搜索堆棧溢出和谷歌有關此錯誤,我無法找到解決方案來解決我的情況。燒瓶JSON json.decoder.JSONDecodeError:期望值:第1行第1列(char 0)

我正在使用棉花糖序列化/反序列化我的API獲取請求。

@post_user_blueprint.route('/api/v1/get_current_profile', methods=['GET']) 
@login_required 
def get_profile(): 
    query_user_by_order = User.query.join(Sample) \ 
     .join(Individual) \ 
     .join(Ordering) \ 
     .join(Family) \ 
     .join(Sequence) \ 
     .filter(User.id == Sample.fk_user_id) \ 
     .filter(Individual.id == Sample.fk_individual_id) \ 
     .filter(Sample.id == Sequence.fk_sample_id) \ 
     .filter(Individual.id == Ordering.fk_individual_id) \ 
     .filter(Family.id == Individual.fk_family_id) \ 
     .filter(User.email == current_user.email)\ *********** 
     .all() 

    result = profile_users_schema.dump(query_user_by_order) 
    return jsonify({'user': result.data}) 


@login_required 
@post_user_blueprint.route('/profile', methods=['GET', 'POST']) 
def profile(): 
    response = requests.get('http://127.0.0.1:5000/api/v1/get_current_profile') 
    response = response.text 
    data = json.loads(response) $$$$$$$$$$$$$$$$$ 
    return render_template('profile.html', user_object = data) 

*****:當我忽略此行,這工作得很好,那我加入這行的唯一原因是爲了顯示誰在他/她的個人資料記錄顯示每個人的個人資料,而不是。$$$$$:這是錯誤的行。

全部追溯

File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 2000, in __call__ 
return self.wsgi_app(environ, start_response) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1991, in wsgi_app 
response = self.make_response(self.handle_exception(e)) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask_restful/__init__.py", line 271, in error_router 
return original_handler(e) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1567, in handle_exception 
reraise(exc_type, exc_value, tb) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise 
raise value 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1988, in wsgi_app 
response = self.full_dispatch_request() 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1641, in full_dispatch_request 
rv = self.handle_user_exception(e) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask_restful/__init__.py", line 271, in error_router 
return original_handler(e) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1544, in handle_user_exception 
reraise(exc_type, exc_value, tb) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/_compat.py", line 33, in reraise 
raise value 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1639, in full_dispatch_request 
rv = self.dispatch_request() 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/flask/app.py", line 1625, in dispatch_request 
return self.view_functions[rule.endpoint](**req.view_args) 
File "/Users/genomics/PycharmProjects/sample_accessioning/app/views/post_inputs.py", line 209, in profile 
profile = response.json() 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/requests/models.py", line 826, in json 
return complexjson.loads(self.text, **kwargs) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/__init__.py", line 319, in loads 
return _default_decoder.decode(s) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 339, in decode 
obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/json/decoder.py", line 357, in raw_decode 
raise JSONDecodeError("Expecting value", s, err.value) from None 
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

我不明白爲什麼發生這種情況時,******線不直接顯示我把@login_required正上方高清get_profile後的錯誤。但是,當@login_required是不存在,它被扔

AttributeError: 'AnonymousUser' object has no attribute 'email' 

如果可能的話,我想知道獲得當前用戶的電子郵件,所以我可以查詢當前用戶的配置文件,而不是整體的一種方式。另外,我真的很想知道爲什麼會出現以下錯誤。

json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

感謝,

回答

1

行,所以我找到了解決辦法,我給我所有的信貸AArias ,因爲他提出了一個更清晰的方式來獲取響應數據。因此,由於HTTP返回的字節不是字符串,你需要明確地將其解碼爲utf-8,並且許多現有的synthax不起作用。我不知道爲什麼。 以下代碼有效。

response = get_profile().data 
data = json.loads(response.decode('utf-8')) 

如果有人試圖將其與.read()或.readall(),它不會正常工作,因爲響應對象沒有讀取或ReadAll方法則進行解碼。最好的方法是最簡單的方法,只需預先解碼並使用「加載」,而不是「加載」。 希望它可以幫助別人

+0

很高興你找到答案。實際上,有一種更好的方式可以在不使用響應的'decode'方法的情況下以unicode字符串的形式獲取響應。只需使用'get_data()'方法即可。數據屬性實際上最終會被棄用,如下所述:http://flask.pocoo.org/docs/0.12/api/#flask.Response。數據對不起,我的壞。你應該把'.data'改成'.get_data(as_text = True)',然後你應該可以避免使用'.decode'('utf-8')'。我更新了我的答案以反映這一點,請讓我知道它是否有效! – AArias

+0

爲什麼在我9個月後的答案仍然有效時不接受,並且實際上解決了您的問題?不是很酷,因爲我花時間來幫助你。 – AArias

1

這是什麼,我認爲正在發生的事情:

您正在爲自己的服務器請求一個端點與@login_required裝飾(我假設你正在使用燒瓶 - 登錄或類似)。這會創建一個不同的會話,其中您希望登錄的「當前用戶」實際上未經過身份驗證(您可能會收到401響應,未經授權)。

如果你想從不失當前已驗證用戶不同的端點的響應,你可以嘗試這樣的事:

@login_required 
@post_user_blueprint.route('/profile', methods=['GET', 'POST']) 
def profile(): 
    response = get_profile().get_data(as_text=True) 
    data = json.loads(response) 
    return render_template('profile.html', user_object = data) 
+0

@ AArias:我得到「TypeError:JSON對象必須是str,而不是'bytes'」,因爲HTTP響應返回的字節不是字符串,我試着用這個stackoverflow解碼http:// stackoverflow.com/questions/6862770/python-3-let-json-object-accept-bytes-or-let-urlopen-output-strings,但它仍然拋出相同的錯誤 – Jessi

+0

答案更新! – AArias

+0

您的更新解決方案完美工作。很好,乾淨,謝謝 – Jessi

相關問題