2015-05-20 26 views
0

我想通過一個post請求從計算機發送一個JSON消息到另一個。 發送該消息的腳本如下:正如我以前使用過它,它工作得很好在以下情況下,爲什麼我無法解碼JSON消息?

message = {'station':'turn on'} 
res = rest.send('POST', server_addr + "/newstation", json.dumps(message), {'Content-Type': 'application/json'}) 

的rest.send(...)方法應該是正確的。

發送POST請求的PC運行Linux,而接收者運行Win 8,如果這意味着什麼的話。

在接收機器,我有以下幾點:

@app.route('/newstation', methods = ['POST']) 
def new_station(): 
    j_data = request.get_json() 
    d = decode_data(j_data) 

其中decode_data(j_data)是以下

def decode_data(j_data): 
    d = json.loads(j_data) 
    return d 

我的問題是:每當我嘗試發送從第一POST請求機器的響應是「內部服務器錯誤」,並在服務器上返回錯誤的機器是「TypeError:期望的字符串或緩衝區」。 現在我想這可能是字符串編碼的問題。

收到了發佈的請求,我可以毫無問題地打印json內容,當我嘗試解碼時會出現問題。

+2

首先,它看起來不像你需要'decode_data'函數。它所做的就是掩飾你在做'json.loads',所以你可以直接在'new_station'下面做。其次,'request.get_json'沒有爲你做解析嗎?我無法從文檔中知道,我現在不能在那裏測試,但如果這是正確的話,'json.loads'調用是多餘的。 –

+0

問題實際上是request.get_json方法,我誤解了文檔。最後j_data是一個字典,我試圖解碼,沒有任何意外,它沒有工作。謝謝,我終於解決了這個問題。 – ThCP

回答

1

我解決了這個問題,這是我的錯誤(當然)。我誤解了文檔。

@app.route('/newstation', methods = ['POST']) 
def new_station(): 
    j_data = request.get_json() 
    #d = decode_data(j_data) 

request.get_json()已經返回給我一個字典,所以decode_data函數實際上並不需要。我已經有了不需要json.loads()的結果。

+1

很高興你解決它,並做好自我回答。我認爲你必須等待2(?)天,但一定要回來,稍後再接受你自己的答案! –

+0

是的,我會盡我所能接受。再次感謝您的解決方案。 – ThCP

相關問題