大致說明JSON 對(duì)象的相關(guān)使用字符
簡(jiǎn)單地說,JSON 對(duì)象可以將 JavaScript 對(duì)象中表示的一組數(shù)據(jù)轉(zhuǎn)換為字符串,然后就可以在函數(shù)之間輕松地傳遞這個(gè)字符串,或者在異步應(yīng)用程序中將字符串從 Web 客戶機(jī)傳遞給服務(wù)器端程序。
這個(gè)字符串看起來有點(diǎn)兒古怪(稍后會(huì)看到幾個(gè)示例),但是 JavaScript 很容易解釋它,而且 JSON 可以表示比名稱/值對(duì)更復(fù)雜的結(jié)構(gòu)。例如,可以表示數(shù)組和復(fù)雜的對(duì)象,而不僅僅是鍵和值的簡(jiǎn)單列表。
當(dāng)需要表示一組值時(shí),JSON 不但能夠提高可讀性,而且可以減少?gòu)?fù)雜性:
- { "programmers": [
- { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
- { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
- { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
- ],
- "authors": [
- { "firstName": "Isaac", "lastName": "Asimov", "genre": "science fiction" },
- { "firstName": "Tad", "lastName": "Williams", "genre": "fantasy" },
- { "firstName": "Frank", "lastName": "Peretti", "genre": "christian fiction" }
- ],
- "musicians": [
- { "firstName": "Eric", "lastName": "Clapton", "instrument": "guitar" },
- { "firstName": "Sergei", "lastName": "Rachmaninoff", "instrument": "piano" }
- ]
- }
至此,您應(yīng)該從技術(shù)角度對(duì)如何在服務(wù)器端處理 JSON 有了基本的把握。本篇文章和本系列的 第 10 部分 不僅提供了技術(shù)層面的幫助,而且還向您展示了 JSON 是一種多么靈活、強(qiáng)大的數(shù)據(jù)格式。即使您不會(huì)在每個(gè)應(yīng)用程序中都使用 JSON,但優(yōu)秀的 Ajax 和 JavaScript 程序員的工具箱中總少不了 JSON 以備不時(shí)之需。#t#
我當(dāng)然很希望能夠分享您的JSON 對(duì)象使用經(jīng)驗(yàn)以及您對(duì)何種語言更善于在服務(wù)器端處理 JSON 數(shù)據(jù)的高見。您可以訪問 Java 和 XML 新聞組(有關(guān)鏈接,請(qǐng)參閱 參考資料 部分)跟我聯(lián)系。享受JSON 對(duì)象和文本數(shù)據(jù)格式的樂趣吧。
- 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...
- }
盡管看起來不明顯,但是上面的長(zhǎng)字符串實(shí)際上只是一個(gè)數(shù)組;將這個(gè)數(shù)組放進(jìn) JavaScript 變量之后,就可以很輕松地訪問它。實(shí)際上,只需用點(diǎn)號(hào)表示法來表示數(shù)組元素。所以,要想訪問 programmers 列表的***個(gè)條目的姓氏,只需在 JavaScript 中使用下面這樣的代碼:
- String newJSONtext = people.toJSONString(); //value is "McLaughlin"
不管在服務(wù)器端使用何種語言,在服務(wù)器端處理JSON 對(duì)象基本上就需要兩個(gè)步驟:
1.針對(duì)編寫服務(wù)器端程序所用的語言,找到相應(yīng)的 JSON 解析器/工具箱/幫助器 API。
2.使用 JSON 解析器/工具箱/幫助器 API 取得來自客戶機(jī)的請(qǐng)求數(shù)據(jù)并將數(shù)據(jù)轉(zhuǎn)變成腳本能理解的東西。