使用服務(wù)器進(jìn)行處理JSON 解析器說(shuō)明介紹
在此時(shí),您在客戶端所做的選擇(比如使用 JavaScript 對(duì)象,然后將其轉(zhuǎn)換成 JSON 字符串)必須要與服務(wù)器端的選擇相匹配,比如使用哪個(gè) API 解碼 JSON 數(shù)據(jù)。管在服務(wù)器端使用何種語(yǔ)言,在服務(wù)器端處理 JSON 解析器基本上就需要兩個(gè)步驟。
針對(duì)編寫服務(wù)器端程序所用的語(yǔ)言,找到相應(yīng)的 JSON 解析器/工具箱/幫助器 API。 使用 JSON 解析器/工具箱/幫助器 API 取得來(lái)自客戶機(jī)的請(qǐng)求數(shù)據(jù)并將數(shù)據(jù)轉(zhuǎn)變成腳本能理解的東西。 以上差不多就是目前所應(yīng)了解的大致內(nèi)容了。接下來(lái),我們對(duì)每個(gè)步驟進(jìn)行較為詳細(xì)的介紹。
尋找 JSON 解析器或工具箱最好的資源是 JSON 站點(diǎn)(有關(guān)鏈接,請(qǐng)參閱 參考資料)。在這里,除了可以了解此格式本身的方方面面之外,還可以通過各種鏈接找到 JSON 的各種工具和解析器,從 ASP 到 Erlang,到 Pike,再到 Ruby,應(yīng)有盡有。#t#
您只需針對(duì)自己編寫腳本所用的語(yǔ)言下載相應(yīng)的工具箱即可。為了讓服務(wù)器端腳本和程序能夠使用此工具箱,可以根據(jù)情況對(duì)其進(jìn)行選擇、擴(kuò)展或安裝(如果在服務(wù)器端使用的是 C#、PHP 或 Lisp,則可變性更大)。
例如,如果使用的是 JSON 解析器,可以簡(jiǎn)單將其升級(jí)至 PHP 5.2 并用它完成操作;在 PHP 這個(gè)最新版本默認(rèn)包含了 JSON 擴(kuò)展。實(shí)際上,那也是在使用 PHP 時(shí)處理 JSON 的最好方法。如果使用的是 Java servlet,json.org 上的 org.json 包顯然就是個(gè)不錯(cuò)的選擇。
在這種情況下,可以從 JSON Web 站點(diǎn)下載 json.zip 并將其中包含的源文件添加到項(xiàng)目構(gòu)建目錄。編譯完這些文件后,一切就就緒了。對(duì)于所支持的其他語(yǔ)言,同樣可以使用相同的步驟;使用何種語(yǔ)言取決于您對(duì)該語(yǔ)言的精通程度,最好使用您所熟悉的語(yǔ)言。
一旦獲得了程序可用的資源,剩下的事就是找到合適的方法進(jìn)行調(diào)用。比如,假設(shè)為 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
通過該模板,可將獲得的所有數(shù)據(jù)(數(shù)組格式的、多行的、單值的或 JSON 數(shù)據(jù)結(jié)構(gòu)中的任何內(nèi)容)轉(zhuǎn)換成原生 PHP 格式,放在 $value 變量中。如果在 servlet 中使用的是 org.json 包,則會(huì)使用如下代碼:
- 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...
- }
我當(dāng)然很希望能夠分享您的 JSON 解析器使用經(jīng)驗(yàn)以及您對(duì)何種語(yǔ)言更善于在服務(wù)器端處理 JSON 數(shù)據(jù)的高見。您可以訪問 Java 和 XML 新聞組(有關(guān)鏈接,請(qǐng)參閱 參考資料 部分)跟我聯(lián)系。享受 JSON 和文本數(shù)據(jù)格式的樂趣吧。



















