一旦您编写完客户端 JavaScript 代码、允许用户与 Web 表单和 Web 页的交互、收集发送给服务器端程序以做处理所需的信息,此时,服务器就成为了应用程序(如果调用了异步使用的服务器端程序,则可能是我们认为的所谓的 “Ajax 应用程序”)中的主角。在此时,您在客户端所做的选择(比如使用 JavaScript 对象,然后将其转换成 JSON 字符串)必须要与服务器端的选择相匹配,比如使用哪个 API 解码 JSON 数据。
处理 JSON 的两步骤不管在服务器端使用何种语言,在服务器端处理 JSON 基本上就需要两个步骤。
以上差不多就是目前所应了解的大致内容了。接下来,我们对每个步骤进行较为详细的介绍。
寻找 JSON 解析器寻找 JSON 解析器或工具箱最好的资源是 JSON 站点(有关链接,请参阅 )。在这里,除了可以了解此格式本身的方方面面之外,还可以通过各种链接找到 JSON 的各种工具和解析器,从 ASP 到 Erlang,到 Pike,再到 Ruby,应有尽有。您只需针对自己编写脚本所用的语言下载相应的工具箱即可。为了让服务器端脚本和程序能够使用此工具箱,可以根据情况对其进行选择、扩展或安装(如果在服务器端使用的是 C#、PHP 或 Lisp,则可变性更大)。
例如,如果使用的是 PHP,可以简单将其升级至 PHP 5.2 并用它完成操作;在 PHP 这个最新版本默认包含了 JSON 扩展。实际上,那也是在使用 PHP 时处理 JSON 的最好方法。如果使用的是 Java servlet,json.org 上的 org.json 包显然就是个不错的选择。在这种情况下,可以从 JSON Web 站点下载 json.zip 并将其中包含的源文件添加到项目构建目录。编译完这些文件后,一切就就绪了。对于所支持的其他语言,同样可以使用相同的步骤;使用何种语言取决于您对该语言的精通程度,最好使用您所熟悉的语言。
使用 JSON 解析器一旦获得了程序可用的资源,剩下的事就是找到合适的方法进行调用。比如,假设为 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... }
可以参考 org.json 包文档(有关链接,请参阅 部分)以了解详细信息。(注意:如果想要获得有关 org.json 或其他 JSON 工具箱的详细信息,可以给我发电子邮件。您的来信会有助于我决定将来大概写的内容!)
结束语至此,您应该从技术角度对如何在服务器端处理 JSON 有了基本的把握。本篇文章和本系列的 第 10 部分 不仅提供了技术层面的帮助,而且还向您展示了 JSON 是一种多么灵活、强大的数据格式。即使您不会在每个应用程序中都使用 JSON,但优秀的 Ajax 和 JavaScript 程序员的工具箱中总少不了 JSON 以备不时之需。
我当然很希望能够分享您的 JSON 使用经验以及您对何种语言更善于在服务器端处理 JSON 数据的高见。您可以访问 Java 和 XML 新闻组(有关链接,请参阅 部分)跟我联系。享受 JSON 和文本数据格式的乐趣吧。
参考资料 学习
developerWorks: 登录
标有星(*)号的字段是必填字段。