在此時,您在客戶端所做的選擇(比如使用 JavaScript 對象,然後將其轉換成 JSON 字符串)必須要與服務器端的選擇相匹配,比如使用哪個 API 解碼 JSON 數據。管在服務器端使用何種語言,在服務器端處理 JSON 解析器基本上就需要兩個步驟。
針對編寫服務器端程序所用的語言,找到相應的 JSON 解析器/工具箱/幫助器 API。 使用 JSON 解析器/工具箱/幫助器 API 取得來自客戶機的請求數據並將數據轉變成腳本能理解的東西。 以上差不多就是目前所應了解的大致內容了。接下來,我們對每個步驟進行較為詳細的介紹。
尋找 JSON 解析器或工具箱最好的資源是 JSON 站點(有關鏈接,請參閱 參考資料)。在這裡,除了可以了解此格式本身的方方面面之外,還可以通過各種鏈接找到 JSON 的各種工具和解析器,從 ASP 到 Erlang,到 Pike,再到 Ruby,應有盡有。
您只需針對自己編寫腳本所用的語言下載相應的工具箱即可。為了讓服務器端腳本和程序能夠使用此工具箱,可以根據情況對其進行選擇、擴展或安裝(如果在服務器端使用的是 C#、PHP 或 Lisp,則可變性更大)。
例如,如果使用的是 JSON 解析器,可以簡單將其升級至 PHP 5.2 並用它完成操作;在 PHP 這個最新版本默認包含了 JSON 擴展。實際上,那也是在使用 PHP 時處理 JSON 的最好方法。如果使用的是 Java servlet,JSon.org 上的 org.JSon 包顯然就是個不錯的選擇。
在這種情況下,可以從 JSON Web 站點下載 JSon.zip 並將其中包含的源文件添加到項目構建目錄。編譯完這些文件後,一切就就緒了。對於所支持的其他語言,同樣可以使用相同的步驟;使用何種語言取決於您對該語言的精通程度,最好使用您所熟悉的語言。
一旦獲得了程序可用的資源,剩下的事就是找到合適的方法進行調用。比如,假設為 PHP 使用的是 JSON-PHP 模板:
- // This is just a code fragment from a larger PHP server-side script
- require_once('JSON.PHP');
- $JSon = new Services_JSON();
- accept POST data and decode it
- $value = $JSon->decode($GLOBALS['HTTP_RAW_POST_DATA']);
- Now work with value as raw PHP
通過該模板,可將獲得的所有數據(數組格式的、多行的、單值的或 JSON 數據結構中的任何內容)轉換成原生 PHP 格式,放在 $value 變量中。如果在 servlet 中使用的是 org.JSon 包,則會使用如下代碼:
- public void doPost(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- StringBuffer jb = new StringBuffer();
- String line = null;
- try {
- BufferedReader reader = request.getReader();
- while ((line = reader.readLine()) != null)
- jb.append(line);
- } catch (Exception e) { //report an error }
- try {
- JSONObject JSonObject = new JSONObject(jb.toString());
- } catch (ParseException e) {
- // crash and burn
- throw new IOException("Error parsing JSON request string");
- }
- // Work with the data using methods like...
- // int someInt = JSonObject.getInt("intParamName");
- // String someString = JSonObject.getString("stringParamName");
- // JSONObject nestedObj = JSonObject.getJSONObject("nestedObjName");
- // JSONArray arr = JSonObject.getJSONArray("arrayParamName");
- // etc...
- }
我當然很希望能夠分享您的 JSON 解析器使用經驗以及您對何種語言更善於在服務器端處理 JSON 數據的高見。您可以訪問 Java 和 XML 新聞組(有關鏈接,請參閱 參考資料 部分)跟我聯系。享受 JSON 和文本數據格式的樂趣吧。