2015年4月22日

Webapp2 教學 (5) - 處理傳入的 JSON 格式資料 ( Handle and parse JSON data in Webapp2 tutorial )

在上一篇文章提到對傳入參數的標準處理方式,接著本篇要介紹使用 JSON 格式資料作為傳入參數時該如何處理,儘管每個人處理的方式會略有不同,這邊紀錄基本的方法給大家參考,如果你有更好的方式請不要吝嗇分享,我非常樂意可以學習更好的方法。( 其他 Webapp2 相關教學可以參考本篇整理 )



前置作業:
因會使用到 JSON 物件,所以我們需要用到 Python 內建 JSON 及 urllib2 模組,記得要將兩個模組都載入,如下:
import json
import urllib2


了解 Request 物件:
在開始針對 JSON 資料處理之前,必須要先了解 WebOb 的 Request 物件處理參數的方式。在官方文件中提到 Request 物件會使用 MultiDict 來儲存所有傳入的參數。所以當有 JSON 物件從 Client 端傳入時,你的資料將會轉為 ( Key, value ) 形式,也因此你的 JSON 物件也會 " 長 " 的跟你想的有點不一樣 ( 試試看傳入一個巢狀的 JSON 物件並印出看看資料的結構 )。


以 POST 方式傳入 JSON 資料的處理:
剛剛提到 JSON 資料存入 MultiDict 之後結構會有點不同,為了解決這個問題我們將不使用 Request 幫我們處理好的資料,而是直接針對 Request 傳入的參數字串去轉為 JSON 物件。首先來看看怎麼從 Client 端 POST JSON 資料,
/* 方法一 */
$.ajax({
    method: "POST",
    contentType: "application/json; charset=utf-8",
    url: "/your_url",
    dataType: "json",
    data: JSON.stringify(mydata)
});

/* 方法二 */
$.post("/your_url", JSON.stringify(mydata));
在 Request Handler 中處理 JSON 資料方式如下:
class YourHandler(webapp2.RequestHandler):
    def post(self):
        myjson = json.loads(self.request.body)


以 GET 方式傳入 JSON 資料的處理:
/* 方法一 */
$.ajax({
    method: "GET",
    /* 其它參數與 POST 相同 */
});

/* 方法二 */
$.get("/your_url", JSON.stringify(mydata));
在 Request Handler 中處理 JSON 資料方式如下:
class YourHandler(webapp2.RequestHandler):
    def get(self):
        myjson = json.loads(urllib2.unquote(self.request.query))


Environment :
  ・ Arch Linux
  ・ Python 2.7

Reference :
  ・ Webapp2 official site
  ・ Request Attributes


熱門文章