这样做的一个好处是,您可以下载样例实用工具,帮助您编写自己的模式,并参照这些工具来验证对象。
AJAX 应用程序依赖于符合预期的 JSON 服务。如果服务没有按预期的格式进行响应,或者使用无效的内容进行响应,则会发生意外行为。对于复杂应用程序,您可以通过实现自定义案例来验证服务响应,从而减轻发生意外行为的风险。另外,您还可以利用 JSON Schema 来验证输入。
JSON Schema 是一种草案标准 (draft standard),它指定了一种基于 JSON 的格式来定义 JSON 数据的结构。在撰写本文时,最新的草案标准版本是 draft-03。
本文将对几个 JSON Schema 验证例程进行比较。了解如何使用一些一流的库,并探讨创建库来验证通信的注意事项和最佳方案。本文还将介绍一种新的实用工具,帮助您编写自己的 JSON Schema。
为您的应用程序选择一个库
为您的应用程序选择一个库可能会是一件复杂的工作。每个应用程序都拥有不同的约束,这些约束会影响您的选择。表 1 简要概述了四个 ">JavaScript JSON Schema 库的特性。
表 1. 针对 JavaScript 的 JSON Schema 验证库
库(作者) 草案版本支持 库的大概规模 JSV: JSON Schema 验证器 (Gary Court) draft-01、draft-02 和 draft-03 120KB json-schema (Kris Zyp) draft-03 10KB(需要 CommonJS) dojox.json.schema (Kris Zyp) draft-02 10KB(需要 Dojo) schema.js (Andreas Kalsch) draft-02(部分) 10KB(需要 CommonJS)
基于 Dojo 的应用程序可能会使用 dojox.json.schema 库,因为该库包含在工具箱中。支持多个版本的(草案)标准的应用程序可能会使用 JSV。
dojox.json.schema 看上去像是 json-schema 的一个分支,所以它们的用法非常相似。schema.js 只实现 draft-02 的一个子集。本文主要关注使用 dojox.json.schema 和 JSV 的示例。
使用 dojox.json.schema
清单 1 显示了一个验证简单对象的 HTML 代码片段。该代码旨在将此对象插入 head HTML 元素中。
清单 1. dojox.json.schema 的单独使用
<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.7.0/dojo/dojo.js" type="text/javascript"></script><script type="text/javascript"> require(["dojox/json/schema"],
function() { // Object to validate var successObj = { "foo" : "bar" }; var failureObj = { "foo" : 1234 }; // Schema var schema = { "type": "object", "properties" : { "foo" : { "type" : "string" } } }; // Run validation,
which should succeed // Change this line to use failureObj to see the failure case var result = dojox.json.schema.validate(successObj, schema); // Check results if (result.valid) { // Success, do something
alert("Object is valid"); } else { // Failure - extract the errors
array var errorArr = result.errors; alert("property : " + errorArr[0].property + "\nmessage : " + errorArr[0].message); } }); </script>