2016-06-19 38 views
0

我正在燒瓶中寫入webapp。從樹莓派上的MySQL服務器獲取表格。如何在POST後返回帶有正確編碼的燒瓶中的JSON

INITIALY WITH郵差

  • 檢測過我在創建表時在MySQL工作臺的編碼設定爲UTF-8倉

  • 我使用MySQLdb.connect(字符集= UTF8)

原始JSON看起來像這樣當設置的charset = utf-8在MySQLdb的。

{ 
    "Menu": [ 
    [ 
     1, 
     "ΣΑΛΑΤΑ", 
     "ΚΡΗΤΙΚΗ", 
     5.5 
    ], 
    [ 
     2, 
     "ΣΑΛΑΤΑ", 
     "ΦΑΚΗ", 
     6 
    ]] 
} 

這是返回JSON(郵差)

{ 
    "Menu": [ 
    [ 
     1, 
     "ΣΑΛΑΤΑ", 
     "ΚΡΗΤΙΚΗ", 
     5.5 
    ], 
    [ 
     2, 
     "ΣΑΛΑΤΑ", 
     "ΦΑΚΗ", 
     6 
    ]] 
} 

至今郵差它工作得很好

現在,當我想打印的網頁上它看起來像這樣:

{ 
    "Menu": [ 
    [ 
     1, 
     "\u03a3\u0391\u039b\u0391\u03a4\u0391", 
     "\u039a\u03a1\u0397\u03a4\u0399\u039a\u0397", 
     5.5 
    ], 
    [ 
     2, 
     "\u03a3\u0391\u039b\u0391\u03a4\u0391", 
     "\u03a6\u0391\u039a\u0397", 
     6.0 
    ] 
    ] 
    } 

並且當我發佈ANDROID應用程序相同的問題。

返回我使用的json jsonify

+0

當你在python內部打印時,你會看到什麼?你在你的HTML文件中包含了嗎? – oxalorg

+1

這是有效的數據,它只是轉義,因此它是ASCII。你怎麼實際*使用數據?請[edit]包含[mcve]。 – davidism

+0

我只是簡單地返回到沒有html代碼的屏幕。只是'jsonify({'Menu':menu})'。有或沒有'app.config ['JSON_AS_ASCII'] = False'效果是一樣的。它只在** POSTMAN ** –

回答

0

這是有效的JSON,unicode字符已轉義,因此值爲ASCII。

如果你真的在JavaScript中解析JSON,你仍然會得到正確的值。假設您使用AJAX請求調用了您的端點,您將使用JSON.parse加載回調中的數據。一些AJAX庫可能會爲你處理。

var parsed_data = JSON.parse(data); 

可以停止jsonify通過禁用JSON_AS_ASCII逃避一切ASCII。您應該避免這樣做,因爲這可能會導致響應中的字符無效。

app.config['JSON_AS_ASCII'] = False 

最好將數據保持原樣並從JavaScript中使用。

+0

上正確顯示,無論有沒有'app.config ['JSON_AS_ASCII'] = False',效果都是一樣的。它只能在** POSTMAN上正確顯示** –

+0

_appears_的方式並不一定反映它的存儲方式。有沒有辦法獲得該JSON的十六進制轉儲? –

+0

它是Unicode字符在字符串中有效的JSON規範的一部分。 – jwg