2007-07-24

Jant Note : JSON encode and decode

描述:
用ajax + json 方式來當作web app 的資料傳遞的架構已經一陣子了. 但是, 一直有一個問題會產生, 那就是特殊字碼跟換行的資料輸出. 首先講到特殊字碼, 一般在http request 裡頭 ? % / 這三個會是一個很大的傳輸問題. 另一個就是, 如果傳輸的資料裡頭有換行, 從client 傳到 server 不會有問題, 但是當資料要由 server 傳回 client ,換行會導致 javascript 在 eval 成 object 有錯誤.

思考:

希望能有一個client 和 server 統一的解法不用針對每一個應用作個別加解密. client再傳送資料的時候可以針對HTTP Request 特殊字碼作編碼, server 在產生JSON String 可以作標準編碼.

解法:
HTTP Request 特殊字碼
找了一下 JavaScript 的文件, 裡頭已經有encodeURI, encodeURIComponent,escape 三種的function來做 http request encode. encodeURI 是針對要傳送的 url , 所以不能自己放string 下去encode, encodeURIComponent 放入一個String 會自己作encode. escape 沒有試過. 所以, 找到的解法就是 使用ajax 傳輸前, 把要傳送資料作encodeURLCompoent 再傳出去就可以了. server 端使用 tomcat 所以, tomcat 會自己做解譯後端程式不用作相對應處理.
JSONString
先前使用自己寫的JSONString function, 裡頭只能應付簡單的字元. 後來去找到 json.org的lib. 使用裡面的JSONObject.quote 來做資料的轉換, 就可以正確的解出資料傳送到client, 換行符號就可以備正常的解譯了.