JSON

掌握 Ajax,第 11 部分: 服务器端的 JSON(2)

字号+ 作者:H5之家 来源:H5之家 2015-10-06 17:17 我要评论( )

一旦您编写完客户端 JavaScript 代码、允许用户与 Web 表单和 Web 页的交互、收集发送给服务器端程序以做处理所需的信息,此时,服务器就成为了应用程序(如果调用了异步使用的服务器端程序,则可能是我们认为的所

一旦您编写完客户端 JavaScript 代码、允许用户与 Web 表单和 Web 页的交互、收集发送给服务器端程序以做处理所需的信息,此时,服务器就成为了应用程序(如果调用了异步使用的服务器端程序,则可能是我们认为的所谓的 “Ajax 应用程序”)中的主角。在此时,您在客户端所做的选择(比如使用 JavaScript 对象,然后将其转换成 JSON 字符串)必须要与服务器端的选择相匹配,比如使用哪个 API 解码 JSON 数据。

处理 JSON 的两步骤

不管在服务器端使用何种语言,在服务器端处理 JSON 基本上就需要两个步骤。

  • 针对编写服务器端程序所用的语言,找到相应的 JSON 解析器/工具箱/帮助器 API。
  • 使用 JSON 解析器/工具箱/帮助器 API 取得来自客户机的请求数据并将数据转变成脚本能理解的东西。
  • 以上差不多就是目前所应了解的大致内容了。接下来,我们对每个步骤进行较为详细的介绍。

    寻找 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 全球站点上的 英文原文 。
  • 掌握 Ajax 系列:阅读本系列以前的文章。第 3 部分 着重介绍了如何发送和接收 Ajax 高级请求和响应。
  • JSON 站点:有关 JSON 所有内容的集汇站,寻找 JSON 解析器和工具箱的最佳资源站点。
  • 阅读 org.json 包 的 JavaDoc。
  • xml.com:最易于理解的在线资源之一,如果您还不是一名经验丰富的 XML 程序员,那么就从这里开始了解关于 XML 的一切吧!
  • “面向 Java 开发人员的 Ajax: 构建动态的 Java 应用程序”(Philip McCarthy,developerWorks,2005 年 9 月):从 Java 的角度看看服务器端的 Ajax。
  • “面向 Java 开发人员的 Ajax: Ajax 的 Java 对象序列化 ”(Philip McCarthy,developerWorks,2005 年 10 月):从 Java 的角度介绍如何通过网络来发送对象并与 Ajax 进行交互。
  • “使用 Ajax 调用 SOAP Web 服务,第 1 部分: 构建 Web 服务客户机”(James Snell,developerWorks,2005 年 10 月):这是一篇相当高级的文章,它介绍了将 Ajax 与现有的基于 SOAP 的 Web 服务相集成的有关内容。
  • World Wide Web Consortium 上的 DOM 主页:了解所有 DOM 相关技术的起点。
  • DOM Level 3 Core Specification:了解核心 Document Object Model 的定义,从可用类型和属性直到在各种语言中使用 DOM 的方法。
  • The ECMAScript language bindings for DOM:希望在代码中使用 DOM 的任何 JavaScript 程序员都应该阅读这个规范。
  • “Ajax: A New Approach to Web Applications”:阅读这篇首创 Ajax 这个术语的文章。这是所有 Ajax 开发人员的必读文章。
  • Head Rush Ajax(Brett McLaughlin,O'Reilly Media, Inc.):学习这篇文章中的思想,并将其牢牢印入脑海:Head First 风格。
  • Java and XML, Second Edition (Brett McLaughlin, O'Reilly Media, Inc.):查看本文作者对 XHTML 和 XML 转换的讨论。
  • JavaScript: The Definitive Guide (David Flanagan,O'Reilly Media, Inc.):深入探讨了处理 JavaScript 和动态 Web 页面的大量指导原则。即将推出的版本添加了关于 Ajax 的两章。
  • 讨论
  • 通过参与 developerWorks blogs 加入 developerWorks 社区。
  • 条评论

    developerWorks: 登录

    标有星(*)号的字段是必填字段。

     

    1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

    相关文章
    • struts2+ajax+json action向页面返回int型数据,页面报异常org.a

      struts2+ajax+json action向页面返回int型数据,页面报异常org.a

      2016-01-31 15:35

    • jQuery+json实现的简易Ajax调用实例

      jQuery+json实现的简易Ajax调用实例

      2016-01-20 18:01

    • Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别

      Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别

      2016-01-18 17:28

    • Ajax与JSON的一些总结

      Ajax与JSON的一些总结

      2016-01-16 15:03

    网友点评
    s